烧瓶 - sqlalchemy连接之间的异步性

时间:2016-09-21 12:58:16

标签: python flask sqlalchemy flask-sqlalchemy

我正在尝试使用flask-sqlalchemy进行一个新项目,没有任何关于烧瓶的经验,也没有尝试过sqlalchemy。

我想了解同时使用不同数据库连接时db.session事务的行为(通过SQLALCHEMY_BINDS配置)。 我定义了三个不同的模型,使用两个不同的数据库连接(都是sqlite),使用模型类属性__bind_key__调度。

应用程序代码类似于:

    db.session.add(First(foo='foo', second=Second(bar='bar')))  # models on the first bind key
    db.session.add(Third(baz='baz'))  # model on the second bind key
    db.session.commit()

查询日志(在标准错误上通过“SQLALCHEMY_ECHO”配置记录)类似于

2016-09-16 14:31:12,602 INFO sqlalchemy.engine.base.Engine BEGIN (implicit)
2016-09-16 14:31:12,603 INFO sqlalchemy.engine.base.Engine INSERT INTO second (bar) VALUES (?)
2016-09-16 14:31:12,603 INFO sqlalchemy.engine.base.Engine ('bar',)
2016-09-16 14:31:12,604 INFO sqlalchemy.engine.base.Engine BEGIN (implicit)
2016-09-16 14:31:12,604 INFO sqlalchemy.engine.base.Engine INSERT INTO third (baz) VALUES (?)
2016-09-16 14:31:12,604 INFO sqlalchemy.engine.base.Engine ('baz',)
2016-09-16 14:31:12,606 INFO sqlalchemy.engine.base.Engine INSERT INTO first (foo, second_id) VALUES (?, ?)
2016-09-16 14:31:12,606 INFO sqlalchemy.engine.base.Engine ('foo', 1)
2016-09-16 14:31:12,606 INFO sqlalchemy.engine.base.Engine COMMIT
2016-09-16 14:31:12,613 INFO sqlalchemy.engine.base.Engine COMMIT

我真的很惊讶地看到Third模型之前插入First模型的查询。看起来两个不同连接上的查询(一旦被commit命令刷新)同时被执行。

sqlalchemy做了一些异步技巧吗? flask-sqlalchemy是否通过自定义会话来完成?或者我只是误解了日志?

0 个答案:

没有答案