为了账号安全,请及时绑定邮箱和手机立即绑定

Flask-SQLAlchemy 会话对象没有看到对数据库的更改?

Flask-SQLAlchemy 会话对象没有看到对数据库的更改?

幕布斯7119047 2021-06-07 16:19:06
我在 PythonAnywhere 上有一个网站,它使用 Flask 和 Flask-SQLAlchemy 连接到 MySQL 数据库。用户可以使用网站将一个任务进行排队,作为记录保存到数据库中,然后一个单独的计划任务(Python 程序)检查数据库并处理每一条未处理的记录。我遇到的问题是计划任务的数据库查询似乎只有在第一次运行时才找到新记录,但是如果我随后使用网站添加新任务,仍在运行的计划任务的重复数据库查询(每 5 秒)似乎没有检测到新记录。关于这里可能发生什么的任何想法?这是 bash 文件运行的代码:def generate_any_pending_videos():    unfinished_videos = db.session.query(Video)\                                  .filter(~Video.status.has(VideoStatus.status.in_(['Error', 'Finished', 'Video deleted'])))\                                  .order_by(Video.datetime_created)\                                  .all()    for video in unfinished_videos:        try:            logging.info("Attempting to create video for video %d" % video.id)            generate_video(video)        except Exception as e:            logging.error(str(e))if __name__ == '__main__':    while True:        generate_any_pending_videos()        time.sleep(5)
查看完整描述

3 回答

?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

找到了一个修复:出于某种原因,db.session.commit()在我的查询使新记录显示之前运行。


if __name__ == '__main__':

    while True:

        generate_any_pending_videos()

        time.sleep(5)

        db.session.commit()  # For some reason this is needed to be able to detect newly-created videos



查看完整回答
反对 回复 2021-06-09
?
GCT1015

TA贡献1827条经验 获得超4个赞

您可以在 sqlalchemy 引擎中更改隔离级别:

engine = create_engine(db_path, execution_options={"isolation_level": "READ COMMITTED"})

那是mysql默认配置的问题。


查看完整回答
反对 回复 2021-06-09
  • 3 回答
  • 0 关注
  • 130 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信