在烧瓶中触发sqlalchemy的连接池

时间:2014-12-11 13:11:08

标签: python postgresql flask sqlalchemy flask-sqlalchemy

我正在为我的服务器使用Flask + SQLAlchemy(DB是Postgres),并且想知道连接池是如何发生的。我知道它默认启用,池大小为5,但我不知道我的代码是否会触发它。

假设我使用默认的烧瓶SQLalchemy桥:

db = SQLAlchemy(app)

然后使用该对象发出数据库调用,如

db.session.query(......)

flask-sqlalchemy如何管理场景后面的连接池?每次访问db.session时它是否会获取新会话?该对象何时返回到池中(假设我不将其存储在本地变量中)?

编写代码以最大化并发性+性能的正确模式是什么?如果我在一个串行方法中多次访问数据库,每次使用db.session是个好主意吗?

我无法找到这种方式的文档,所以我不知道幕后发生了什么(代码有效,但会扩展吗?)

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用活动注册 - http://docs.sqlalchemy.org/en/latest/core/event.html#event-registration 可以监控许多不同的事件类型,checkoutcheckinconnect等...... - http://docs.sqlalchemy.org/en/latest/core/events.html

以下是有关在建立新连接时打印文档的基本示例。

from sqlalchemy.event import listen
from sqlalchemy.pool import Pool

def my_on_connect(dbapi_con, connection_record):
    print "New DBAPI connection:", dbapi_con

listen(Pool, 'connect', my_on_connect)