Я создал 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
)