我正在开发一个使用 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_obj0都db_obj1将被创建或不被创建。
| 归档时间: |
|
| 查看次数: |
11839 次 |
| 最近记录: |