python - flask-sqlalchemy:数据未更新
问题描述
我正在结合 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 查询,但这并没有改变结果。
提前致谢,
解决方案
我在 while 循环的末尾添加了一个 db.session.close() - 现在数据已重新加载。
推荐阅读
- c - 在后台运行音乐 - GBDK
- php - 更新一个或多个字段,忽略 MySQL 中的空字段
- javascript - 对 getStats API 的 WebTransport 支持
- ios - 为什么将绑定注入 UIViewControllerRepresentable 会导致保留周期?
- rabbitmq - AMQP Elixir 库发出错误“未定义函数 'Elixir.AMQP.Application':get_channel(chan)”
- exception - 通过 urlfetchapp 发出请求会产生“异常:属性提供的值无效:标头:内容长度”
- ios - SwiftUI 中的 Firebase 初始化数据快照
- typescript - 如何使我的打字稿库对我的打字稿应用程序进行类型检查
- scala - 求火花流窗口函数的最小值和最大值
- python - 清除所有对象的某些字段的所有数据?