如何解决Python flask-sqlalchemy:查询后是否必须提交会话?
我正在使用MySQL DB(https://flask-sqlalchemy.palletsprojects.com/en/2.x/)在python flask-sqlalchemy中编写一个应用程序,我想知道之后是否必须制作“ db.session.commit()或db.session.rollback()” GET调用,仅查询数据库。
例如:
@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)
接着是close sessions的方法:
def init_db(app):
app.teardown_appcontext(teardown_session)
def teardown_session(exception=None):
db_session.remove()
最重要的是:不,您不必担心commit
或rollback
,即使在SQL中,会话管理(完全独立)也由Flask-SQLALchemy处理>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。