Flask-SQLAlchemy - Когда создаются и уничтожаются таблицы/базы данных?
Я немного смущен тем, о чем упоминается в названии.
Итак, когда приложение Flask запущено, SQLAlchemy ищет SQLALCHEMY_DATABASE_URI
для правильной, в моем случае, базы данных MySQL. Затем создает таблицы, если они уже не существуют?
Что делать, если база данных, запрограммированная в переменной SQLALCHEMY_DATABASE_URI
в файле config.py
, не существует?
Что делать, если эта база данных существует, и существует только несколько из таблиц (Есть больше таблиц, закодированных в код SQLAlchemy, чем в фактической базе данных MySQL)? Удаляет ли эти таблицы и создает новые таблицы с текущими спецификациями?
А что, если все эти таблицы существуют? Удаляются ли они и воссоздаются?
Я пытаюсь понять, как работает весь процесс, чтобы я (1) не терял информацию о базе данных при внесении изменений в схему и (2) мог написать необходимый код, чтобы полностью управлять тем, как и когда SQLAlchemy ведет переговоры с фактической базой данных.
Ответы
Ответ 1
Таблицы не создаются автоматически; вам нужно вызвать метод SQLAlchemy.create_all()
чтобы явно создать таблицы для вас:
db = SQLAlchemy(app)
db.create_all()
Вы можете сделать это с помощью утилиты командной строки, например. Или, если вы развернете в PaaS, например, Google App Engine, выделенный вид только для администратора.
То же самое относится к уничтожению таблицы базы данных; используйте метод SQLAlchemy.drop_all()
.
См. Главу "Создание и удаление таблиц" в документации или ознакомьтесь с главой, посвященной базам данных, в учебнике по Mega Flask.
Вы также можете делегировать эту задачу Flask-Migrate или аналогичным средствам управления версиями схемы. Они помогут вам записывать и редактировать шаги создания и переноса схемы; схема базы данных реальных проектов никогда не бывает статичной, и вы хотели бы иметь возможность перемещать существующие данные между версиями или схемой. Создание исходной схемы - это только первый шаг.