私はsqlalchemyを初めて使用しています。私はsqlalchemyを使用して、マルチスレッドWebアプリケーションでのDBの対話を処理したいと考えています。SQLAlchemy:スコープ付きセッションをリクエストにバインドする方法
だから、私は要求を処理MoinMoin
Wikiを使用するので、私は要求を含むオブジェクトmacro.request
を持って
import sqlalchemy
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker, scoped_session
engine = create_engine('mysql://mydb')
session_factory = sessionmaker(autocommit = False,
autoflush = False,
bind = engine)
Session = scoped_session(session_factory)
で始まります。
私は今、いくつかのクラスにメソッドを持って、
def do_sth():
session = Session()
# use the session to get some data from the db
どこで、どのように私はそれを要求
Multi-threaded use of SQLAlchemyを読むSession
オブジェクトがリンクしている伝えないと言いますか?
、単一のセッションがScopedSessionレジストリ要請するすべての人のために維持されるように、それは、ストレージとしてデフォルトの用途[threading.local()]によるScopedSessionオブジェクト
を言いますが、単一スレッドのスコープ内でのみ実行できます。別のスレッドでレジストリを呼び出す呼び出し元は、そのスレッドにローカルなSessionインスタンスを取得します。
"レジストリを別のスレッドで呼び出す呼び出し元は、他のスレッドのローカルなSessionインスタンスを取得します。"
セッションインスタンスは、どのリクエストにリンクされているかを一度も伝えていないと、どのようにローカルになりますか?