SQLAlchemy: как я могу обновить таблицу в базе данных при обновлении модели в models.py - PullRequest
0 голосов
/ 03 июня 2019

У меня есть модель SQLAlchemy под названием User, и я хочу добавить другое свойство в класс, например: address.

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

Я посмотрел в Интернете, как внести изменения в модель, которая затем автоматически обновит таблицу, но все, что я нашел, это db.sessions, где они вручную вводят изменения, которые хотят внести. Есть ли лучший способ обновить модель?

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(20), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)
    image_file = db.Column(db.String(20), nullable=False, default='default.jpg')
    password = db.Column(db.String(60), nullable=False)
    # new class property that I want to add
    address = db.Column(db.String(100), nullable=False)

1 Ответ

0 голосов
/ 03 июня 2019

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

Поскольку вы уже используете Flask-SQLAlchemy, Flask-Migrate , вероятно, подходит:

  1. Добавьте Flask-Migrate к зависимостям вашего проекта
  2. Запустите flask db init для инициализации миграций для вашего проекта (это одноразовая задача)
  3. Обновите вашу модель (звучит так, как выуже сделали это)
  4. Запустите flask db migrate, чтобы сгенерировать файл миграции (это должно быть сделано только в рамках разработки миграций)
  5. Примените его с помощью flask db upgrade (для этого потребуетсябыть выполненным для каждой копии базы данных при объединении нового кода, т. е. на каждой машине разработки, в стадии подготовки, в производстве и т. д.)
...