Используйте flask -migrate с декларативной базой вместо db.model - PullRequest
0 голосов
/ 28 апреля 2020

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

Я скачал flask Перенос, который я получил работать с db.model, но я бы хотел, чтобы он работал напрямую с декларативной базой. Как мне это сделать?

Вот как я настраиваю его с помощью db.model

app = Flask(__name__, static_folder = "static", template_folder = "templates/vue_template")
app.config['SQLALCHEMY_DATABASE_URI'] = "postgresql+psycopg2://user:password@localhost:5432/testdb"

db =SQLAlchemy(app)

class Person(db.Model):
    id=db.Column(db.Integer, primary_key=True)
    name=db.Column(db.String(80))
    username=db.Column(db.String(80))




migrate = Migrate(app,db)
manager = Manager(app)
manager.add_command('db', MigrateCommand)

if __name__ == '__main__':
    manager.run()

Затем я запускаю следующие команды в терминале

python test.py db init

python test.py db migrate -m "Initial migration."

python test.py db upgrade

Если Затем я добавляю новый столбец email = db.Column(db.String(120)) в таблицу Person и запускаю

python test.py db migrate -m "Add column"

python test.py db upgrade

. Затем я вижу новый столбец в таблице Person в базе данных. Отлично.

Вопрос
Но как мне сделать ту же процедуру добавления столбца с таблицей на основе Declarative_base (как показано ниже)
Т.е. добавление столбца email = Column(String) к Таблица ниже с использованием flask -migrate

class Person(Base):
    __tablename__ = "person"

    id = Column(Integer, primary_key=True)
    name=Column(String)
    username=Column(String)

Что мне нужно изменить в коде, чтобы это работало?

Спасибо

1 Ответ

0 голосов
/ 29 апреля 2020

Flask -Migrate - это расширение, которое работает вместе с Flask -SQLAlchemy. Если вы не используете Flask -SQLAlchemy, тогда вы не можете использовать Flask -Migrate.

Но Flask -Migrate использует Alembi c под капотом, и Alembi c также может быть используется напрямую. Так что это моя рекомендация, просто используйте Alembi c. Это требует немного больше работы с точки зрения конфигурации и настройки, но будет работать с вашим проектом SQLAlchemy.

...