使用 flask_sqlalchemy 插入新数据后,查询表还是旧的数据

2018-01-23 14:57:04 +08:00
 hjaycee
# 插入代码
user = UserModel(username='aaa')
db.session.add(user)
db.session.commit()

# 查询代码
isExist = UserModel.query.filter_by(username='aaa').first()

除非重启服务,不然一直查不到这条新数据,这是为什么呢?
5954 次点击
所在节点    Flask
15 条回复
jingniao
2018-01-23 15:07:42 +08:00
mysql ?注意隔离级别
hjaycee
2018-01-23 15:22:38 +08:00
@jingniao 业务层没这么复杂吧?我都已经提交事务了
ilovebaicai
2018-01-23 15:39:37 +08:00
参考这个看一下: https://segmentfault.com/q/1010000002852369
0Y89tX3MgR4I
2018-01-23 15:46:04 +08:00
直接上 SQLalchemy,没几行代码,更加灵活
hcymk2
2018-01-23 15:46:48 +08:00
把 SQL 日志输出看下。
Beebird
2018-01-23 15:57:05 +08:00
可能需要 db.session.flush() 一下
Hstar
2018-01-23 16:34:56 +08:00
那么是这条数据没插进去还是一直查不出来?
hjaycee
2018-01-23 16:48:29 +08:00
@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 = []
~~~
jingniao
2018-01-23 18:55:27 +08:00
mysql 事务隔离级别 默认是 可重复读 repeatable read
也就是同一个连接 多次读取相同记录时,保证读到的内容是一致的
你改为 read committed
以上更改需要设置在 mysqld 配置文件中或者设置当然 sessein/连接
另外 sqlalchemy 默认是做了 session 缓存,这也是一个原因
jingniao
2018-01-23 19:01:52 +08:00
@jingniao 也可能不是这个问题🤗
likuku
2018-01-23 19:07:58 +08:00
最近在用 sqlite3 + flask-sqlalchemy,没这个问题... sqalchemy 也是用了 session,

哦... 我查询的大部分还是直接裸写的 sql ... Orz
flniu
2018-01-23 22:46:34 +08:00
不要使用 autocommit
lgh
2018-01-23 23:07:16 +08:00
把你的 query 也 commit 一下,别问我怎么知道的
glasslion
2018-01-24 10:46:15 +08:00
我前一阵从 Django 转 Flask 时, 也遇到过一模一样的问题, 忘记怎么解决了。 只记得开发时用 flask run 没有问题, 放到线上用 gunicorn 才出现问题
octobersnow
2018-05-21 08:56:57 +08:00
@flniu 为什么不要使用 autocommit?求大佬解释

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/425249

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX