我正在研究一个使用 SQLAlchemy 进行数据库访问的 Python 服务器应用程序。 我想将引擎、会话和元数据对象放在一个元.py 模块中,该模块在整个程序中使用,以访问数据库(如Pyrons Convention)。
引擎和会话对象在元模中初始化为 < code> noone code >,然后在其他模块中实际指定真实值。
model/meta.py
:
engine = None
Session = None
metadata = Metadata()
model/___init___.py
:
from simplesite.model import meta
def init_model():
# ...
sm = orm.sessionmaker(...)
meta.Session = orm.scoped_session(sm)
问题是当我在另一个模块中导入并运行 init_model ()
, 然后从 mod.py 导入会话时, 它仍然设置为无。 I. e. 。
from model.meta import Session
from model import init_model
init_model()
# Session is still None!
有人能告诉我为什么这是和(或)它是如何在Python应用中工作的吗? 我猜答案对Python是如何工作的更为重要?
关于在整个应用中如何有一个单一的数据库存取点的备选建议(即在大型应用中使用SQLAlchemy的最佳做法)也将受到赞赏。