Python flask-sqlalchemy:我必须在查询后提交会话吗?
Python flask-sqlalchemy: Do I have to commit session after a query?
我正在使用 MySQL DB (https://flask-sqlalchemy.palletsprojects.com/en/2.x/) 在 python flask-sqlalchemy 中编写一个应用程序,我想知道是否必须制作“db.session.commit()或 db.session.rollback()" 在 GET 调用后,仅查询 DB .
例如:
@app.route('/getOrders')
def getOrders():
orders = Order.query.all()
# Do I have to put here "db.session.commit()" or "db.session.rollback" ?
return { 'orders': [order.serialize() for order in orders] }
orders = Order.query.all()
是一个 SELECT
查询,可以扩展以包含其他过滤器(WHERE
等)。它不会改变数据库,它只是从中读取值。正是出于这个原因,您不需要 commit
阅读 - 除了“我刚刚阅读此数据”之外,您会存储什么?数据库以其他方式关注这一点,即访问权限和日志。
鉴于以上情况,rollback
没有任何意义,因为实际上没有任何更改可以回滚。
Flask-SQLAlchemy 在会话等方面做了一些魔术。大致相当于:
from sqlalchemy.orm import scoped_session, sessionmaker
Session = sessionmaker(bind=engine, autocommit=False, autoflush=False)
db_session = scoped_session(Session)
后面有一个方法:
def init_db(app):
app.teardown_appcontext(teardown_session)
def teardown_session(exception=None):
db_session.remove()
底线是:不,您不必担心这里的 commit
或 rollback
,即使在 SQL 中,会话管理(完全独立)也已处理通过 Flask-SQLALchemy
我正在使用 MySQL DB (https://flask-sqlalchemy.palletsprojects.com/en/2.x/) 在 python flask-sqlalchemy 中编写一个应用程序,我想知道是否必须制作“db.session.commit()或 db.session.rollback()" 在 GET 调用后,仅查询 DB .
例如:
@app.route('/getOrders')
def getOrders():
orders = Order.query.all()
# Do I have to put here "db.session.commit()" or "db.session.rollback" ?
return { 'orders': [order.serialize() for order in orders] }
orders = Order.query.all()
是一个 SELECT
查询,可以扩展以包含其他过滤器(WHERE
等)。它不会改变数据库,它只是从中读取值。正是出于这个原因,您不需要 commit
阅读 - 除了“我刚刚阅读此数据”之外,您会存储什么?数据库以其他方式关注这一点,即访问权限和日志。
鉴于以上情况,rollback
没有任何意义,因为实际上没有任何更改可以回滚。
Flask-SQLAlchemy 在会话等方面做了一些魔术。大致相当于:
from sqlalchemy.orm import scoped_session, sessionmaker
Session = sessionmaker(bind=engine, autocommit=False, autoflush=False)
db_session = scoped_session(Session)
后面有一个方法
def init_db(app):
app.teardown_appcontext(teardown_session)
def teardown_session(exception=None):
db_session.remove()
底线是:不,您不必担心这里的 commit
或 rollback
,即使在 SQL 中,会话管理(完全独立)也已处理通过 Flask-SQLALchemy