как загрузить уже существующие данные флеш-sqlalchemy - PullRequest
0 голосов
/ 10 января 2019

Я пишу REST API с использованием flask_restful и управляю mysql db с помощью flask-sqlalchemy. Я хотел бы знать, каков наилучший способ загрузки существующих данных в таблицу при запуске приложения.

В настоящее время я вызываю метод db.create_all() в конечной точке с помощью декоратора @app.before_first_request. Я хотел бы затем заполнить одну из таблиц, созданных с существующими данными из файла csv. Должен ли код выдвигать данные в отдельный скрипт или в функцию?

Спасибо!

1 Ответ

0 голосов
/ 25 января 2019

Я бы отделил загрузку исходных данных базы данных от инициализации приложения, потому что, вероятно, исходные данные из моего опыта не будут часто изменяться и могут занять некоторое время, если файл больше, и обычно вам не нужно каждый раз перезагружать его в базе данных. время приложения загружается.

Я думаю, что вам наверняка понадобится миграция базы данных на каком-то этапе разработки приложения, поэтому я бы предложил настроить Flask-Migrate для этого и запустить метод обновления при создании приложения (create_app метод, если вы используете Flask шаблон фабрики приложений ), который будет обрабатывать миграции баз данных. Я говорю это, так как это избавит вас от головной боли, когда вы представите его позже в базе данных, уже заполненной фактическими данными, инициализированными с db.create_all().

А для заполнения базы данных начальными данными я бы выбрал Flask CLI или Flask-Script . В одном из моих недавних проектов я использовал для этого Flask-Script и создал отдельный файл manage.py, который среди других методов управления приложениями содержал метод начального заполнения данных, который выглядел примерно так:

@manager.command
def seed():
    "Load initial data into database."
    db.session.add(...)
    db.session.commit()

И он был запущен по требованию с помощью следующей команды:

python manage.py seed
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...