SQLAlchemy:在一个线程中访问同一个会话的本质是什么?

时间:2015-04-03 15:18:19

标签: python multithreading sqlalchemy

示例代码:

Session = scoped_session(sessionmaker(bind=engine))
session1 = Session()
session2 = Session()
session1 is session2 # => True

在SQLAlchemy中,scoped_session有2个效果:

  1. 不同的主题获得不同的会话。
  2. 当您致电Session()时,会返回相同的会话。
  3. 问题: 我理解效果1避免在同一个会话上运行的差异线程可能导致竞争条件(我是对的吗?)。但是效果2的本质是什么(或者我们为什么要在一个线程中使用相同的会话)?

1 个答案:

答案 0 :(得分:1)

在一个线程中,只有一个会话可以同时访问数据库,刷新,提交和关闭。然后是下一个。所以在这种情况下,一个会话就足够了。然后让它成为单身。