12

sqlalchemy と postgresql に関連する問題があります。

class Profile(Base):
  ...

  roles = relationship('Role', secondary=role_profiles,
                       backref='profiles', lazy='dynamic')

実行時 (current_userProfileクラスのインスタンス):

roles = current_user.roles.filter().all()

sqlalchemy を使用してidle in transaction、postgresql でプロファイルを読み取るためのすべての選択を取得します。

編集:

クエリをエコーすると、すべての選択が次で始まることがわかります。

BEGIN (implicit)

別の編集:

追加後

pool_size=20, max_overflow=0

アイドルの数が大きくなると、ステートメントがロールバックされているようcreate_engineです。idle in transactionこれについてのアイデアはありますか?これは問題の悪い解決策でしょうか?

これを管理するにはどうすればよいですか?また、BEGINfor select を取り除くにはどうすればよいでしょうか?

4

2 に答える 2

2

デフォルトでは、SQLAは常にトランザクションで動作します(ここにいくつかの情報があります)。Web コンテキストでは、ほとんどのフレームワークがリクエストの最後にこのトランザクションのコミットを処理します (例: pyramid_tm )。フレームワークを使用していない場合、またはこれが別のタイプのアプリケーションである場合は、終了時または適切な時点でコミットまたはロールバックする必要があります。

トランザクションを自動的に開始しないように SQLA を構成することは可能かもしれませんが、私が見る限り、それは意図された使用方法ではないため、おそらくそれと戦おうとしないほうがよいでしょう :)。

于 2014-03-07T04:35:44.143 に答える