【发布时间】:2018-06-25 15:27:53
【问题描述】:
我正在结合 MySQL 和 Flask API 运行 SQLAlchemy。我们对请求使用模型,并使用 db.session.add() 和 db.session.commit() 创建和更新更改。
我们也在并行运行数据处理——它是一个无限循环,每次运行都会查询数据库(Model.query.filter_by(...).all())——但是,我们只得到之前在数据库中的数据而不是更新的数据 - 数据本身已经在数据库中。如果我们重新启动应用程序,就会找到新的数据。
使用 db = SQLAlchemy(app) 创建数据库,然后导入并在模型中使用
class Model(db.Model):
name = db.Column(db.String(255), index=True, unique=True)
active = db.Column(db.Boolean)
def create(self):
db.session.add(self)
db.session.commit()
def update(self):
db.session.commit()
def run_update():
while True:
models = Model.query.filter_by(active=True).all()
for model in models:
do_something(model)
time.sleep(300)
def do_something():
longtask = threading.Thread(target=long_task)
longtask.start()
def long_task():
// Update database here again
// Task has finished before it is run again.
time.sleep(10)
如果创建了新条目,则仅在重新启动应用后在模型查询中捕获结果。
我已经尝试用 db.session.query(Model) 替换 Model.query 查询,但这并没有改变结果。
提前致谢,
【问题讨论】:
-
你碰巧在使用 MySQL 吗?
-
是的,我正在使用 MySQL
-
可能是隔离级别问题?
标签: python sqlalchemy