flask 使用 SQLAlchemy 的两种方式

Posted 罗兵の水库

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了flask 使用 SQLAlchemy 的两种方式相关的知识,希望对你有一定的参考价值。

 

1. 使用 flask-SQLAlchemy 扩展

# flask-ext-sqlalchemy.py

from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config[SQLALCHEMY_DATABASE_URI] = sqlite://
app.config[SQLALCHEMY_TRACK_MODIFICATIONS] = True
db = SQLAlchemy(app)


# 定义ORM
class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(80), unique=True)
    email = db.Column(db.String(120), unique=True)

    def __init__(self, name, email):
        self.name = name
        self.email = email

    def __repr__(self):
        return <User %r> % self.name
        

# 创建表格、插入数据
@app.before_first_request
def setup():
    # Recreate database each time for demo
    db.create_all()
    
    admin = User(admin, [email protected])
    db.session.add(admin)

    guestes = [User(guest1, [email protected]),
               User(guest2, [email protected]),
               User(guest3, [email protected]),
               User(guest4, [email protected])]
    db.session.add_all(guestes)
    db.session.commit()
    
    
# 查询
@app.route(/user)
def users():
    users = User.query.all()
    return "<br>".join(["{0}: {1}".format(user.name, user.email) for user in users])
    
# 查询
@app.route(/user/<int:id>)
def user(id):
    user = User.query.filter_by(id=id).one()
    return "{0}: {1}".format(user.name, user.email)
    
# 运行
if __name__ == __main__:
    app.run(127.0.0.1, 5000) 

 

2. 使用原生 SQLAlchemy

# flask-pure-sqlalchemy.py

from flask import Flask
from sqlalchemy import Column, Integer, String
from sqlalchemy import create_engine
from sqlalchemy.orm import Session
from sqlalchemy.ext.declarative import declarative_base

app =  Flask(__name__)

Base = declarative_base()
# 定义ORM
class User(Base): __tablename__ = users id = Column(Integer, primary_key=True) name = Column(String(50), unique=True) email = Column(String(120), unique=True) def __init__(self, name=None, email=None): self.name = name self.email = email def __repr__(self): return <User %r> % (self.name) # 创建表格、插入数据 @app.before_first_request def setup(): # Recreate database each time for demo engine = create_engine(sqlite://, echo=True) global session session = Session(engine) Base.metadata.drop_all(bind=engine) Base.metadata.create_all(bind=engine) admin = User(admin, [email protected]) session.add(admin) guestes = [User(guest1, [email protected]), User(guest2, [email protected]), User(guest3, [email protected]), User(guest4, [email protected])] session.add_all(guestes) session.commit() # 查询 @app.route(/user) def users(): users = session.query(User).all() return "<br>".join(["{0}: {1}".format(user.name, user.email) for user in users]) @app.route(/user/<int:id>) def user(id): user = session.query(User).filter(User.id == id).one() return "{0}: {1}".format(user.name, user.email) if __name__ == __main__: app.run(127.0.0.1, 5000)

 

区别

 

以上是关于flask 使用 SQLAlchemy 的两种方式的主要内容,如果未能解决你的问题,请参考以下文章

python-flask复习——Flask —SQLAlchemy

python-flask-scoped_session创建session的两种方式

flask_sqlalchemy和sqlalchemy联系区别及其使用方式

Flask SQLAlchemy & model

Flask 学习-96.Flask-SQLAlchemy 判断查询结果是否存在的几种方式

添加路由的两种方式