Python - SQLAlchemy多个会话

时间:2018-04-10 13:45:12

标签: python sqlalchemy

我正在研究一个使用SQLAlchemy读/写MySQL数据库的系统。我有一个工厂,它使用自己的会话制作多个存储库。我阅读了文档os SQLAlchemy,并指出不同进程不应使用一个会话。

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

我的问题是,进行不同的会话是一种好习惯吗?是否会出现并发问题或竞争?

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

1 个答案:

答案 0 :(得分:2)

sqlalchemy会话是轻量级对象,因此创建多个会话没有问题,并且在使用多个进程或多个线程时必须使用多个会话,因为无法在进程和线程之间共享会话。

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

将事务与会话一起使用以确保原子性属性更好:

session = get_session()
with session.begin():
    session.add(db_obj0)
    session.add(db_obj1)

将创建db_obj0和db_obj1,或者不创建。