Flask-SQLAlchemy:后台删除

时间:2019-06-29 08:50:53

标签: python mysql flask sqlalchemy flask-sqlalchemy

我有一个基于flask的Web应用程序,它使用Flask-SQLAlchemy进行数据库交互(MySQL)。该数据库存储多个传感器数据的日期时间/值对(10k或更多),用户可以在前端显示这些数据。

当用户决定删除传感器时,必须删除所有日期时间/值对。为了使网站保持响应状态,我在数据库中设置了删除标志,该标志应由后台线程收集,然后将其删除。

我实例化了一个全局sqlalchemy数据库对象,如下所示:

  

global_object.py

from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

然后在应用程序工厂中,我导入了该数据库对象并对其进行了初始化:

  

factory.py

from flask import Flask
from global_object import db
from backgroundWatch import backgroundWatch

def create_app():
    app = Flask(__name__)

    # app configuration here...

    db.init_app(app)

    background = backgroundWatch(app)
    background.run()

    return app

然后在backgroundWatch中导入数据库对象并在应用程序上下文中执行数据库操作:

  

backgroundWatch.py​​

from global_object import db
import threading
import time
from Datamodel import Sensors

class backgroundWatch(threading.Thread):
    def __init__(self, app):
        self.app = app
        self.sleep_timeout = 60

    def run(self):
        while True:
            with self.app.app_context():
                deletes = db.session.query(Sensors).filter_by(delete=1).all()
                if len(deletes) > 0:
                    for delete_obj in deletes:
                        db.session.delete(delete_obj)
                    db.session.commit()

在所有蓝图中,我还导入了该db对象并进行了数据库交互。

问题是,当删除发生时,需要数据库访问的用户请求不会得到处理。我认为这是因为我正在使用相同的数据库会话。但是,我真的不知道该如何更改,或者实际上什么是正确的方法。

您能否给我一些有关如何正确执行此操作的提示,以便前端保持响应状态?

非常感谢!

0 个答案:

没有答案