Python - SQLAlchemy 多个会话

AMN*_*ess 5 python sqlalchemy

我正在开发一个使用 SQLAlchemy 读取/写入 MySQL 数据库的系统。我有一个工厂,它创建多个存储库,每个存储库都有自己的会话。我阅读了 os SQLAlchemy 文档,它指出一个会话不应由不同的进程使用。

我无法使用相同的会话,因为代码将在不同的机器上运行。

我的问题是,举办不同的会议是一个好习惯吗?会出现并发问题或竞争吗?

示例:如果我有 2 个会话将多条记录写入数据库,并且记录发生冲突。session.commit() 会中止一切吗?

小智 6

SQLAlchemy 会话是轻量级对象,因此创建多个会话并不麻烦,并且在使用多个进程或多线程时必须使用多个会话,因为会话不能在进程和线程之间共享。

如果两个会话之间存在冲突,则根据会话配置,将在 session.commit 或会话自动提交时引发冲突。

最好使用会话和事务来确保原子性:

session = get_session()
with session.begin():
    session.add(db_obj0)
    session.add(db_obj1)
Run Code Online (Sandbox Code Playgroud)

两者db_obj0db_obj1将被创建或不被创建。

  • 仅供参考,现代实现不需要 `session.begin()`:https://docs.sqlalchemy.org/en/13/orm/session_api.html#sqlalchemy.orm.session.Session.begin (4认同)