sqlalchemy没有返回更新的行信息

时间:2017-11-15 21:59:14

标签: python mysql database sqlalchemy

我有一个位于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})

发生了什么事?

0 个答案:

没有答案