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联系区别及其使用方式