Как мне обновить базу данных sql, созданную с помощью flask-sqlalchemy?

#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. flask-migrate.readthedocs.io/en/latest

Ответ №1:

Это называется миграцией базы данных. В основном вам нужно 2 шага-

  1. Обновите файл модели до нового состояния (добавьте свой столбец).
  2. Запустите «миграцию» — это одноразовое изменение для обновления СУЩЕСТВУЮЩЕЙ базы данных в соответствии с новой моделью (в данном случае это было бы UPDATE TABLE ADD COLUMN ... )

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