python - 如何使用 SQLAlchemy + postgreSQL 减少连接数?

标签 python postgresql heroku sqlalchemy flask

我正在 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()

当我为页面创建 Controller 时,我会这样做:

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 背景,所以我对如何处理数据库连接有一定的心态(即像上面的例子),但我担心它不适合 python.

在一个地方抽象数据库连接然后在所有导入中使用相同连接的正确方法是什么?

最佳答案

在 SQL Alchemy 中,您应该能够创建连接池。这个池是每个 Dyno 的池大小。在 Dev 和 Basic 计划中,因为您最多可以有 20 个,如果您运行 1 个测功机,您可以将其设置为 20,如果您运行 2 个,则可以设置为 10,等等。要配置您的池,您可以设置引擎:

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

这会为您的数据库引擎设置一个池,然后您会自动从中提取池。您还可以手动配置池,有关更多详细信息,请参阅 SQL Alchemy 的池指南 - http://docs.sqlalchemy.org/en/latest/core/pooling.html

关于python - 如何使用 SQLAlchemy + postgreSQL 减少连接数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15497027/

相关文章:

python - 在 FastAPI 中仅初始化一次繁重服务的最佳方法

Python 异常链

sql - 从 Rails 模式文件中删除 SQL 代码

sql - 每周汇总最近加入的记录

ruby-on-rails - PG错误不知道如何调试

python - Tensorflow Shape 必须为 1 级,但为 2 级

python - 排序的关键参数是如何工作的?

ruby-on-rails - heroku db:push 错误未初始化常量 Sequel::Postgres::PGError

heroku - 将不在项目根目录中的应用程序部署到 Heroku?

ruby-on-rails - Ruby on Rails - 无法加载 postgres 适配器