我正在尝试使用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是否通过自定义会话来完成?或者我只是误解了日志?