11

私はherokuで、 PostgresアドオンをDevプランで使用して開発してい20ます. 私は初めてでpython、これは些細なことかもしれませんが、OperationalError: (OperationalError) FATAL: too many connections for role.

現在私は持っていますdatabeam.py

import os
from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
from settings import databaseSettings

class Db(object):
    def __init__(self):
        self.app = Flask(__name__)
        self.app.config.from_object(__name__)
        self.app.config['SQLALCHEMY_DATABASE_URI'] = os.environ.get('DATABASE_URL', databaseSettings())
        self.db = SQLAlchemy(self.app)

db = Db()

ページのコントローラーを作成するときは、次のようにします。

import databeam

db = databeam.db
locations = databeam.locations

templateVars = db.db.session.query(locations).filter(locations.parent == 0).order_by(locations.order.asc()).all()

これは私が望むものを生成しますが、ゆっくりと時々上記のエラーを引き起こします。私はバックグラウンドから来たのでphp、DB 接続を処理する方法について特定の考え方を持っています (つまり、上記の例のように) が、python.

データベース接続を 1 か所で抽象化し、すべてのインポートで同じ接続を使用する適切な方法は何ですか?

4

1 に答える 1

13

SQL Alchemy 内で、接続プールを作成できるはずです。このプールは、各 Dyno のプール サイズです。Dev および Basic プランでは、最大 20 まで設定できるため、1 つの dyno を実行する場合は 20、2 を実行する場合は 10 などに設定できます。プールを構成するには、エンジンをセットアップできます。

engine = create_engine('postgresql://me@localhost/mydb',
                   pool_size=20, max_overflow=0)

これにより、自動的にプルするプールを使用して db エンジンがセットアップされます。プールを手動で構成することもできます。詳細については、SQL Alchemy のプーリング ガイド ( http://docs.sqlalchemy.org/en/latest/core/pooling.html ) を参照してください。

于 2013-03-19T18:17:02.807 に答える