首页 > 解决方案 > sqlalchemy with scoped_session that some_session.close() 和 scoped_session.remove() 是否相等?

问题描述

我是 sqlalchemy (1.4) 的新手,想处理多线程 web api 服务。

两个问题:

  1. 我对使用 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() ?

  1. 而在另一部分会话中常见问题:何时构建会话(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 时会不会冲突?

标签: python-3.xdatabasesqlalchemyorm

解决方案


推荐阅读