我正在开发一个使用 SQLAlchemy 进行数据库访问的 Python 服务器应用程序。我想在 meta.py 模块中有引擎、会话和元数据对象,这些对象在整个程序中用于访问数据库(如 Pylons 约定)。
引擎和会话对象None
在 meta.py 模块中初始化,然后在其他模块中实际分配实际值。例如
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()
在另一个模块中运行时,然后从 meta.py 导入 Session,它仍然设置为 None。IE
from model.meta import Session
from model import init_model
init_model()
# Session is still None!
有人可以告诉我为什么会这样和/或它在 Pylons 应用程序中是如何工作的吗?我猜答案将是关于 Python 如何工作的更基本的东西?
关于如何在整个应用程序中拥有单点数据库访问的替代建议也将受到赞赏(即在大型应用程序中使用 SQLAlchemy 的最佳实践)。