0
私はです。SQLAlchemy CORE 1.0.9ピラミッドフレームワーク1.7です。私は次のエラーを取得を開始アプリを使用して、数時間後SQLAlchemyのコア+ピラミッドがコネクションを閉じていない
# file __ini__.py
from .factories import root_factory
from pyramid.config import Configurator
from sqlalchemy import engine_from_config
def main(global_config, **settings):
""" This function returns a Pyramid WSGI application."""
config = Configurator(settings=settings, root_factory=root_factory)
engine = engine_from_config(settings, prefix='sqlalchemy.')
# Retrieves database connection
def get_db(request):
connection = engine.connect()
def disconnect(request):
connection.close()
request.add_finished_callback(disconnect)
return connection
config.add_request_method(get_db, 'db', reify=True)
config.scan()
return config.make_wsgi_app()
:
sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) FATAL: remaining connection slots are reserved for non-replication superuser connections
どうやら私が到達していると私は、データベース9.4のpostgresに接続するため、次の構成を使用しています接続の最大数。それはconnections.close()のように本当に接続を閉じていない、ちょうどプールへの接続を返します。 NullPoolを使用してプーリングを無効にできますが、おそらくパフォーマンスに大きな影響を与えます。
誰かが正しく設定する方法を知っていますか?SQLAlchemy Core良いパフォーマンスを得て接続を適切に閉じるには?
pyramid tutorialsへのリンクを控えてください。私はで、SQLAlchemy ORMセットアップに興味はありません。 のみSQLAlchemyコアしてください。
Zope Transaction Manager(pyramid_tm)を使うべきだと思います。これはピラミッドアプリのラッパーで、リクエスト処理と統合されています。要求が無事に完了すると、トランザクションは自動的にコミットされます。あるいは、例外が発生した場合、トランザクションを中止します。 [詳細情報](http://pyramid-sqlalchemy.readthedocs.io/en/latest/transactions.html) – webjunkie
FWIW私はあなたのサンプルコードに間違ったことはありません。 ORMは物事が本当に削除されることを保証するために 'Session.remove'を持っていますが、SQLAコアを使うと、' .close'が動作するはずです。 –