尝试在线程中向mysql数据库添加内容时找不到应用程序

2024-09-30 06:25:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我创建了一个带有flask resful的api,设置如下(简化):

app.py
controllers.apiController.py
controllers.otherController.py
models.databaseModels.py

app.py包含以下内容:

from controllers import apiController

app = Flask(__name__)
api = Api(app)

app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:password@db:3306/db'

db.init_app(app)
api.add_resource(apiController.UserRegistration, '/api/<version>/registration')

if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0', threaded=True)

注册时,会调用上述路由,这会将我们引导到具有此路由资源的apiController。注册是这里的一个例子,但我在这里所做的是在线程中调用otherController中名为addUsers的函数

class UserRegistration(Resource):
    def get(self, version):

        Thread(name='Test', target=otherController.addUsers, args=(names)).start()

        response = jsonify(
            message='Started',
            status_url='test'
        )
        response.status_code = 200
        return response          

此函数根据名称和其他数据创建用户模型对象列表,并希望使用以下行将其批量添加到数据库中:

db.session.bulk_save_objects(users_to_add, return_defaults=True)
db.session.commit()

这个线程之所以有效,是因为我可以打印要添加到其中db的对象列表。然而,我似乎得到以下错误:

RuntimeError: No application found. Either work inside a view function or push an application context.

用户模型如下所示:

new_user = UserModel(
                name=name,
                created_at=datetime.datetime.fromtimestamp(timestamp).strftime('%Y-%m-%d %H:%M:%S'),
                updated_at=datetime.datetime.fromtimestamp(timestamp).strftime('%Y-%m-%d %H:%M:%S'),
                role_id=1
            )

Tags: namepyaddapitrueapp路由db

热门问题