きちんと整理するために、これを別の質問にすると思いました。これは、SQLAlchemyがデータベースとSQLAlchemyセッションを更新しないことに基づいて います:データベースを存続させる方法は?。
これが取引です。デーモンと通信するPyramidアプリケーションがあり、デーモンはデータベースと通信します。
次のように、データベースセッション変数にデータベースを追加すると、何らかの理由でデータベースにコミットされません。
DBSession.add(ModelInstance)
フラッシュまたはコミットを呼び出しても、コミットされません。
これが私がDBSessionを作る方法です:
settings = {
'sqlalchemy.url':'blah blah'
}
DBSession = scoped_session(sessionmaker(extension=ZopeTransactionExtension()))
engine = engine_from_config(settings, 'sqlalchemy.')
DBSession.configure(bind=engine)
データベースを正常にクエリできるので、これは私には問題ないようです。すなわち:この種のものは機能します:
DBSession.query(ModelClass).get(id)
この立派な紳士https://stackoverflow.com/users/100297/martijn-pietersは、次の少しのコードの使用を提案しました。
import transaction
transaction.commit()
そして、それは私のものがコミットされたことを確認するためにうまくいきました。唯一の問題は、それがどういうわけか私のDBSessionを役に立たなくすることです。したがって、セッションが追跡しているオブジェクトを使用する場合は、セッションとそれらのアイテムを再インスタンス化する必要があります。これは最悪だ。かなりの時間がかかります。
私の質問は、要するに、どうすればこれを回避できるかということです。
そして長い間:
- DBSessionを中断せずに正しくコミットするにはどうすればよいですか?
また
- 長時間のデータベース呼び出しを必要とせずに、DBSessionと関連するモデルインスタンスを修正するにはどうすればよいですか?
と
- なぜこれが起こっているのか考えていますか?私が言及したPyramidアプリ内で同じ方法でDBSessionを正常に構築しましたが、それは完全に正常に機能し、必要なときにすべてをコミットしました。
私が遭遇したエラーの詳細については、最初に述べた2つの質問を参照してください。