Python flasksqlalchemy:查询后是否必须提交会话?

2024-06-23 19:30:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用python flask sqlalchemy和MySQL DB(https://flask-sqlalchemy.palletsprojects.com/en/2.x/)编写一个应用程序,我想知道在GET调用之后是否必须执行“DB.session.commit()或DB.session.rollback()”,这只查询数据库

例如:

@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] }

Tags: httpscomflaskdbsqlalchemysessionmysqlorder
1条回答
网友
1楼 · 发布于 2024-06-23 19:30:35

orders = Order.query.all()是一个SELECT查询,可以扩展以包括其他筛选器(WHERE等)。它不改变数据库,只是从中读取值。您不需要因为这个原因而在读取时commit,除了“我刚刚读取了这个数据”之外,您还会存储什么呢?数据库以其他方式关注这一点,即访问权限和日志

鉴于上述情况,rollback没有任何意义,因为实际回滚没有任何更改

除其他外,炼金术在治疗过程中发挥了一些魔力。这大致相当于:

from sqlalchemy.orm import scoped_session, sessionmaker

Session = sessionmaker(bind=engine, autocommit=False, autoflush=False)
db_session = scoped_session(Session)

后跟一个方法close sessions

def init_db(app):
    app.teardown_appcontext(teardown_session)

def teardown_session(exception=None):
    db_session.remove()

底线是:不,您不必担心这里的commitrollback,即使在SQL中,会话管理(完全独立)由Flask SQLALchemy处理

相关问题 更多 >

    热门问题