首页 > 解决方案 > 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 查询,但这并没有改变结果。

提前致谢,

标签: pythonsqlalchemy

解决方案


我在 while 循环的末尾添加了一个 db.session.close() - 现在数据已重新加载。


推荐阅读