python-3.x - sqlalchemy with scoped_session that some_session.close() 和 scoped_session.remove() 是否相等?
问题描述
我是 sqlalchemy (1.4) 的新手,想处理多线程 web api 服务。
两个问题:
- 我对使用 web api 服务的线程本地会话部分( https://docs.sqlalchemy.org/en/14/orm/contextual.html#using-thread-local-scope-with-web-applications )感到困惑:
web service start: Session = scoped_session(sessionmaker(bind=engine))
web request comes: Session() # does this means: a_scoped_session = Session() ?
Session.query(MyClass) # so this means: a_scoped_session.query(MyClass)
Session.add(some_obj) # so this also means: a_scoped_session.add(some_obj)
Session.commit() # so this also means: a_scoped_session.commit()
Session.remove() # so this means: a_scoped_session.remove() ?
# if so, is it equivalent to a_scoped_session.close() ?
- 而在另一部分会话中常见问题:何时构建会话(https://docs.sqlalchemy.org/en/14/orm/session_basics.html#when-do-i-construct-a-session-when-do -i-commit-it-and-when-do-i-close-it),它说你应该坚持一个会话,在所有查询和事务中重用它(也许这部分不考虑多线程环境)。
我认为上述原则有助于我们获得更好的性能,但是在 web api 服务应用程序中使用 scoped_session 时会不会冲突?
解决方案
推荐阅读
- c# - 如何用对象数组修补对象
- javascript - 有没有办法通过App Script自动恢复Google Form的“文件上传问题”文件夹?
- angular - 从同步融合开始,是否有任何使用圆形量规的工作?
- php - 在laravel中选择标签a的链接?
- docker - 为什么我没有对 /run 的 rw 访问权限,它在 docker 中作为 tmpfs 安装?
- phpstorm - 在 PhpStorm 实时模板中插入当前时间或日期
- javascript - NPM 许可证检查器删除版本
- css - 是否可以检查是否定义了 CSS 变量?
- dart - 我可以通过条件导入隐藏某些环境的方法吗?
- javascript - amcharts 地图:点击时动态更改工具提示