#python #sqlalchemy #flask-sqlalchemy
#python #sqlalchemy #flask-sqlalchemy
Вопрос:
Я использую flask-sqlalchemy для хранения пользователей и сообщений. Вся база данных хранится в этом файле users.sqlite3. Допустим, это мой пользовательский класс:
class User(db.Model, UserMixin):
id = db.Column("id", db.Integer, primary_key=True)
name = db.Column(db.String(100))
email = db.Column(db.String(100), unique=True)
password = db.Column(db.String(100))
status = db.Column(db.String(100))
about = db.Column(db.String(500))
Теперь предположим, что я хотел добавить еще один столбец, например, любимый номер или что-то в этом роде. Мне пришлось бы добавить number = db.Column(db.Integer())
. Но тогда это не сработает, потому что файл уже сгенерирован, и теперь я говорю, что там есть еще один столбец, которого там нет. Поэтому мне пришлось бы удалять все данные в этом файле и начинать с пустой базы данных каждый раз, когда я хочу ее обновить.
Есть ли способ обойти это? Могу ли я что-то сделать, чтобы просто сделать так, чтобы эти другие значения были пустыми, когда я их добавлял?
Комментарии:
Ответ №1:
Это называется миграцией базы данных. В основном вам нужно 2 шага-
- Обновите файл модели до нового состояния (добавьте свой столбец).
- Запустите «миграцию» — это одноразовое изменение для обновления СУЩЕСТВУЮЩЕЙ базы данных в соответствии с новой моделью (в данном случае это было бы
UPDATE TABLE ADD COLUMN ...
)
sqlalchemy предоставляет alembic
пакет для помощи с миграциями, вам просто нужно сгенерировать их и убедиться, что они выполняются при каждом развертывании, чтобы поддерживать актуальность схемы базы данных в соответствии с вашим кодом.