2013-03-19 28 views
7

私はherokuに、20の接続制限を持つDevプランを使用してPostgresアドオンを使用して開発中です。私はpythonを初めて使用しましたが、これは簡単なことかもしれませんが、OperationalError: (OperationalError) FATAL: too many connections for roleをせずにデータベース接続を抽象化することは困難です。SQLAlchemy + postgreSQLを使用して接続数を減らすには?

現在、私は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とうまく適合しない恐れがあります。

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

答えて

10

SQL Alchemyでは、接続プールを作成できるはずです。このプールは、各Dynoのプールサイズとなります。

engine = create_engine('postgresql://[email protected]/mydb', 
        pool_size=20, max_overflow=0) 
:セットアップエンジンをすることができ、あなたのプールを設定するのDevと基本計画あなたが最大20を持っている可能性があるので、あなたは2を実行する場合は1つのダイノ、10を実行した場合、あなたは20でこれを設定することができ、その他には

これは自動的にプールからプールを取得してデータベースエンジンを設定します。手動でプールを構成することもできます。詳細はSQL Alchemyのプーリング・ガイドにあります。 - http://docs.sqlalchemy.org/en/latest/core/pooling.html

+2

これは古い回答ですが、私はこの詳細を見つけるのが難しいと思います。プールサイズを20に設定した場合、dynoは20回の同時リクエストしか処理できません(各リクエストでデータベースが使用され、プールから接続されるため)。これは大きなボトルネックのように思えるので、確かに私は何か誤解しています。助けて! – Joe

関連する問題