如何验证是否配置了sqlalchemy会话?

时间:2014-01-13 15:45:25

标签: python sqlalchemy

sqlalchemy会话的标准/正常配置:

from sqlalchemy.orm import scoped_session, sessionmaker

DBSession = scoped_session(sessionmaker(extension=ZopeTransactionExtension()))  # 0
engine = engine_from_config(config, 'sqlalchemy.')

try:
   DBSession.query('1').scalar()    # 1
except UnboundExecutionError:
   pass  # expected here - session is not bound

DBSession.configure(bind=engine)   # 2

try:
   DBSession.query('1').scalar()   # 3
except UnboundExecutionError:
   pass  # not expected here - session is bound ?

任何使用未绑定会话的尝试都将以broken?会话对象结束 - 要使用会话我必须使用第0行创建新会话。

我应该如何检查会话对象是否未绑定并始终只保留一个对象?

1 个答案:

答案 0 :(得分:1)

您应该保留对会话工厂的引用。

而不是

DBSession = scoped_session(sessionmaker(extension=ZopeTransactionExtension()))  # 0
engine = engine_from_config(config, 'sqlalchemy.')

你可以做到

engine = engine_from_config(config, 'sqlalchemy.')
Session= sessionmaker(extension=ZopeTransactionExtension(), bind=engine)
DBSession= Session()

每当您需要会话时,只需致电Session()即可。没有必要单身。