Приложение не найдено при попытке добавить контент в базу данных mysql в потоке - PullRequest
0 голосов
/ 29 апреля 2019

Я создал api с flask-resful со следующей настройкой (упрощенно):

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 с ресурсом для этого маршрута.Регистрация является примером здесь, но то, что я делаю здесь, вызывает функцию внутри другого контроллера, называемую 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()

поток работает, так как я могу напечатать список объектов, которые будут добавлены в БД в нем.Тем не менее, я, кажется, получаю следующую ошибку:

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
            )
...