在使用sqlalchemy仅进行query查询时(没有变更数据),为什么打印日志中会出现ROLLBACK信息?

【打印的信息】

经测试这个ROLLBACK,在代码中self.db.close() 前执行
clipboard.png

【代码和配置】

业务代码
clipboard.png

session配置代码使用默认: autoflush=True, autocommit=False, expire_on_commit=True

【自己查询的信息】

1、sqlalchemy在进行query操作时,会先执行一下flush(),把信息提交到数据库(但没有commit)

2、在查询后增加self.db.commit() 就没有打印ROLLBACK信息了

网页没有查到相关的解释

所以想问,query操作时,没有变更数据,运行机理是什么?为什么的会出现的ROLLBACK信息,查询也一定要进行commit()吗?

阅读 3.9k
1 个回答

1.每次开启一个session,都会开启一个事务
2.close一个session时,如果事务还没有提交,将会回滚
3.commit()之后,事务已经提交,close时就不会回滚了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题