【发布时间】:2019-02-08 21:50:34
【问题描述】:
我在 PythonAnywhere 上有一个网站,它使用 Flask 和 Flask-SQLAlchemy 连接到 MySQL 数据库。用户可以使用该网站将保存到数据库中的任务作为表中的记录进行排队,然后一个单独的计划任务(Python 程序)检查数据库并处理每条未处理的记录。
我遇到的问题是计划任务的db查询似乎只在第一次运行时才找到新记录,但如果我随后使用网站添加新任务,仍在运行的计划任务重复出现db 查询(每 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)
【问题讨论】:
-
你确定服务器的数据库连接已经持久化了更改(即事务已经提交),你确定计划任务的数据库会话刷新而不是对缓存对象进行操作吗?
-
我使用 MySQL Workbench 来确认新记录正在被持久化,我不确定第二点,事实上这就是我怀疑发生的事情,但我不确定如果这就是会话的工作方式。如果有办法刷新会话可以解决我的问题。
-
尝试打开一个新会话,或者看看这个问题:stackoverflow.com/questions/19143345/…
-
你能提供你的代码(或者更好,一个最小的工作示例)吗?如果不看看你在做什么,就很难提供帮助。
-
@jorgeh 我已经添加了正在运行的代码的本质。请注意,“db”对象是来自我的 Flask 服务器的
SQLAlchemy(app)Flask-SQLAlchemy 对象,我不确定这是否会有所不同。
标签: python mysql flask flask-sqlalchemy pythonanywhere