我正在研究一个使用SQLAlchemy读/写MySQL数据库的系统。我有一个工厂,它使用自己的会话制作多个存储库。我阅读了文档os SQLAlchemy,并指出不同进程不应使用一个会话。
我无法使用相同的会话,因为代码将在不同的计算机上运行。
我的问题是,进行不同的会话是一种好习惯吗?是否会出现并发问题或竞争?
实施例: 如果我有2个会话将多个记录写入数据库,并与记录发生冲突。 session.commit()会中止一切吗?
答案 0 :(得分:2)
sqlalchemy会话是轻量级对象,因此创建多个会话没有问题,并且在使用多个进程或多个线程时必须使用多个会话,因为无法在进程和线程之间共享会话。
如果两个会话之间发生冲突,则会根据会话配置在session.commit或会话自动提交上引发冲突。
将事务与会话一起使用以确保原子性属性更好:
session = get_session()
with session.begin():
session.add(db_obj0)
session.add(db_obj1)
将创建db_obj0和db_obj1,或者不创建。