1
owenliang 2018-08-03 15:03:58 +08:00
这个库意义不大,不如 dbutils 搞个 mysql-python 的连接池用。
|
2
mrchi 2018-08-03 15:12:00 +08:00
lazy 参数改为 "dynamic" 试试?如果贴一下完整代码更好
|
5
mrchi 2018-08-03 22:52:10 +08:00 1
@Mrkon 好吧,那我说一下问题 3。
User 是数据库模型,也是 Class,u = User() 是创建了 User 类的一个实例,这个时候跟 db.session 是无关的,如果要写到数据库里,在 commit 之前,需要执行 db.session.add (我一般用的 add,没用过 merge );但如果 u 是通过数据库查出来的,比如 u = User.query.get(1),这个时候 u 是默认在 session 中的。 不知道这样说你能不能理解。另外好奇 merge 和 add 有什么不同 |
6
Mrkon OP @mrchi 感谢
我在网上查找到: 使用 session.merge() 方法替代 session.add(),其实就是 SELECT + UPDATE 其实我感到最疑惑的一点是我在两个项目用了相同的函数,但是一个不用将 u = User ()加入到 session 中,另外一个需要,一开始怀疑是自动 commit,但是并没有发现自动提交的代码。我使用的是 flask |
7
mrchi 2018-08-04 14:21:59 +08:00
@Mrkon 这个 merge 有意思,哈哈哈
关于自动 commit,Flask-sqlalchemy 有一个配置项 SQLALCHEMY_COMMIT_ON_TEARDOWN,目前最新的版本默认是 False 的,如果设置为 True 就会自动 commit。 另外,Flask-sqlalchemy 准备删除这个配置,也就是去掉自动 commit 这个功能,参考这个 [issue]( https://github.com/mitsuhiko/flask-sqlalchemy/issues/216) 中的讨论。目前,文档中已经删掉了这个配置的信息,但代码中(`https://github.com/mitsuhiko/flask-sqlalchemy/blob/master/flask_sqlalchemy/__init__.py`,L791 )还是存在这个配置的,也就是说还能用,但最好不要再用了,推荐手动 commit。 |
8
Mrkon OP @mrchi 恩,谢谢,但是奇怪的是,我在配置项里面没有使用 SQLALCHEMY_COMMIT_ON_TEARDOWN,并且手动把 SQLALCHEMY_COMMIT_ON_TEARDOWN 设置成 False 也同样报错,这就很奇特了
|
9
cqzhao 2020-09-14 22:47:16 +08:00
我有遇到了这个问题。请问怎么解决的
|