我有一个位于mysql之上的Web应用程序。当我启动它时,我从头开始构建mysql数据库,并使用pymysql连接到它。
快进......
我用sqlalchemy连接到db(非声明的?)重写了所有内容?我可以连接到db,读取db,更新等。我还使用MySQLWorkbench以图形方式查看数据库。
我的webapp有几个表将轮询数据库以进行更改,并更新表。例如,我有一个作业队列,它将更新百分比完成。这是踢球者:
当我发送作业时,我将在MySQLWorkbench中查看数据库。我可以证实这份工作正在进行(我看到攀登的百分比)。这确认了webapp正在写入数据库。但!另一方面,在表要求状态的地方,它没有收到更新的信息(我在模型中,以及在烧瓶应用程序中以及FE js中完成了打印输出)。
这里发生了什么?即使我在MySQLWorkbench中可以看到它的连接不是'发布'或者其他的东西?以下是我的一些代码:
#models.py
from sqlalchemy.ext.automap import automap_base
from sqlalchemy.orm import Session
from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session, sessionmaker, Query
import os
import json
Base = automap_base()
engine = create_engine("mysql+pymysql://user:asdas758ef10d2364d54d7e8@localhost:{}/metadatacontroller".format(3306))
# reflect the tables
Base.prepare(engine, reflect=True)
EncodeQueue = Base.classes.encode_queue
db_session = scoped_session(sessionmaker(bind=engine))
class DataStore:
def __init__(self):
self.db = db_session()
#receive status
def queue_rendering_items(self):
query = self.db.query(EncodeQueue).filter(EncodeQueue.status.in_(['queue', 'rendering', 'rendering thumbnails'])).all()
return_query = []
for item in query:
row = {'artist_id': item.artist_id,
'art_id': item.art_id,
'status': item.status,
'progress': item.errors,
'artwork_title': item.artwork_title,
'artist_name': item.artist_name,
}
return_query.append(row)
return return_query
#update status
def update_render_progress(self, job_id, progress):
self.db.query(EncodeQueue).filter_by(job_id=job_id).update\({'errors': json.dumps(progress)})
self.db.commit()
(忽略update_render_progress
中的反斜杠...怪异的SO格式化)
这就是'状态'在烧瓶终点上调用代码:
@app.route('/api/jobs', methods=["GET"])
def get_all_jobs():
db = models.DataStore()
all_art = db.queue_rendering_items()
print(all_art)
return jsonify({'data':all_art})
最后,状态正在另一台机器上由另一个文件更新:
import models
db = models.DataStore()
db.update_render_progress(job_id, {'percentage': percentage_complete, 'time_remain': render.render_estimated_seconds_remaining})
发生了什么事?