这个库也太坑了,我用的数据库是mysql,使用的库和版本如下:
pymysql == 0.8.0 flask_restful == 2.3
# 设置了自动提交,改完数据后调用下面两个方法也不起作用 db.session.flush db.session.close()
其它人也和我一样碰到这个问题:
查询用db.session.query
去查询,不要用文档中的查询方式model.query
(真的很坑)
# 错误 UserModel.query.all() # 正确 db.session.query(UserModel).all()
这个查询方式我还是从这里看到的,文档上没写
附上踩完坑的demo: python_api
![]() | 1 jingniao 2018-01-23 15:07:42 +08:00 via Android mysql ?注意隔离级别 |
3 ilovebaicai 2018-01-23 15:39:37 +08:00 参考这个看一下: https://segmentfault.com/q/1010000002852369 ? |
![]() | 4 0Y89tX3MgR4I 2018-01-23 15:46:04 +08:00 via Android 直接上 SQLalchemy,没几行代码,更加灵活 |
5 a href="/member/hcymk2" class="dark">hcymk2 2018-01-23 15:46:48 +08:00 把 SQL 日志输出看下。 |
![]() | 6 Beebird 2018-01-23 15:57:05 +08:00 可能需要 db.session.flush() 一下 |
7 Hstar 2018-01-23 16:34:56 +08:00 那么是这条数据没插进去还是一直查不出来? |
8 hjaycee OP @Hstar 插进去了,可以在数据库里看到,只是在不重启服务的情况下用代码查不出来 ~~~ user = UserModel(username='a') db.session.add(user) db.session.commit() a = UserModel.query.all() print a # a = [] user = UserModel(username='b') db.session.add(user) db.session.commit() a = UserModel.query.all() print a # a = [] user = UserModel(username='c') db.session.add(user) db.session.commit() a = UserModel.query.all() print a # a = [] ~~~ |
![]() | 9 jingniao 2018-01-23 18:55:27 +08:00 via Android mysql 事务隔离级别 默认是 可重复读 repeatable read 也就是同一个连接 多次读取相同记录时,保证读到的内容是一致的 你改为 read committed 以上更改需要设置在 mysqld 配置文件中或者设置当然 sessein/连接 另外 sqlalchemy 默认是做了 session 缓存,这也是一个原因 |
![]() | 11 likuku 2018-01-23 19:07:58 +08:00 最近在用 sqlite3 + flask-sqlalchemy,没这个问题... sqalchemy 也是用了 session, 哦... 我查询的大部分还是直接裸写的 sql ... Orz |
![]() | 12 flniu 2018-01-23 22:46:34 +08:00 不要使用 autocommit |
13 lgh 2018-01-23 23:07:16 +08:00 via iPhone 把你的 query 也 commit 一下,别问我怎么知道的 |
![]() | 14 glasslion 2018-01-24 10:46:15 +08:00 我前一阵从 Django 转 Flask 时, 也遇到过一模一样的问题, 忘记怎么解决了。 只记得开发时用 flask run 没有问题, 放到线上用 gunicorn 才出现问题 |
![]() | 15 octobersnow 2018-05-21 08:56:57 +08:00 via iPhone @flniu 为什么不要使用 autocommit?求大佬解释 |