这个库也太坑了,我用的数据库是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
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?求大佬解释
|