私はデータベースアクセスに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に設定されたままになることです。つまり
from model.meta import Session
from model import init_model
init_model()
# Session is still None!
誰かがこれがなぜであるか、および/またはそれがPylonsアプリケーションでどのように機能するかを教えてもらえますか?答えはPythonがどのように機能するかについてもっと基本的なものになると思いますか?
アプリケーション全体で単一のデータベースアクセスポイントを使用する方法に関する代替案もありがたいです(つまり、大規模なアプリケーションでSQLAlchemyを使用するためのベストプラクティス)。