python - Flask-SQLAlchemy:如何将参数传递给 create_engine(),例如 pool_size?
问题描述
一个菜鸟的困惑问题:
如何以及在哪里设置 pool_size?
我发现在文档中将池大小设置为:
engine = create_engine('postgresql://me@localhost/mydb',
pool_size=20, max_overflow=0)
,但是有没有办法为下面的片段设置 pool_size ,如果是的话很高兴知道如何?
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:root@localhost/testdb'
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
def __repr__(self):
return '<User %r>' % self.username
......
......
错误如下:
sqlalchemy.exc.TimeoutError: QueuePool limit of size 10 overflow 10 reached, connection timed out, timeout 30
解决方案
如果您使用 >= 2.4 版,则该SQLALCHEMY_ENGINE_OPTIONS
键专门用于指定将传递给create_engine
( docs ) 的关键字参数。因此,在您的情况下,添加app.config["SQLALCHEMY_ENGINE_OPTIONS"] = {"pool_size": 20}
到您的应用程序配置应该可以解决问题。
或者,您可以将关键字参数的 dict 传递给构造函数(docsengine_options
)的参数,例如,等效于上面,除了这些值将合并并优先于也定义在中的任何引擎设置。SQLAlchemy()
SQLAlchemy(app, engine_options={"pool_size": 20})
SQLALCHEMY_ENGINE_OPTIONS
最后,有一套带SQLALCHEMY_
前缀的配置密钥已被折旧,但在 3.0 之前都可以使用。在这种情况下app.config["SQLALCHEMY_POOL_SIZE"] = 20
。除非您使用早于 2.4 的版本,否则最好使用前一个选项之一。
推荐阅读
- python - 如何操作 python 列表中的数据来修改和存储?
- python - Python Aiohttp 客户端 - 禁用编码重定向 url
- seo - Vaadin 14 流量和 SEO,PWA
- github - 存储库之间的 Github 同步常量?
- visual-studio-code - 在 VScode 中,有没有办法通过快捷方式每两三行进入下一行?
- powershell - PowerShell Uninstall-Package -Force 和 -ForceBootstrap 不起作用,仍然要求用户确认
- asp.net - SignalR - 用于数据库操作的 ChatHub 依赖管理
- python - 如果 t.__str__() 返回一个非字符串,而不是 print(t.__str__()),为什么 print(t) 会出错?
- javascript - Ionic Geolocation 适用于浏览器但不适用于 android 模拟器
- hash - SHA256 Hashing with two blocks:第一个块的哈希应该在哪里输入?