Как выполнить первую миграцию в flask?

#python #flask #flask-sqlalchemy

#python #flask #flask-sqlalchemy

Вопрос:

Я работаю над новым проектом, который уже разработан в Flask, и я ничего не знаю о Flask. Моя компания предоставила мне проект, потому что у меня есть опыт работы с Django.

Это структура проекта:

 models
  -db.py
  -model1.py
  -model2.py
  - ..
static
  - ..
templates
  - ..
myapp.py
  

myapp.py содержит все файлы конфигурации и код инициализации сервера со всеми другими функциями, такими как домашняя страница и страница регистрации.

Когда я запускаю myapp.py , он работает нормально, но таблицы не создаются автоматически (я обнаружил, что необходимо выполнить первую миграцию). Я понятия не имею, как это сделать.

В проекте используются модули postgresql и SQLAlchemy из flask_sqlalchemy.

db.py файл:

 from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()
  

Все модели имеют from db import db

myapp файл:

 # ===================================================================
# SQL ALCHEMY
# ===================================================================

if (SERVER_MODE == RUN_MODE.PRODUCTION):
    app.config['SQLALCHEMY_DATABASE_URI'] = (
        os.environ["DATABASE_URL"]
    )
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
else:
    app.config['SQLALCHEMY_DATABASE_URI'] = (
        'postgresql://'  
        'creathiveswebapp:creathives'  
        '@'  
        'localhost/cl_creathives_pgdb'
    )
    app.config['SQLALCHEMY_ECHO'] = False
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True

db.init_app(app)
  

и

 ...
# ===================================================================
# START SERVER
# ===================================================================

if __name__ == "__main__":
    port = int(os.environ.get('PORT', 5000))
    if (SERVER_MODE == RUN_MODE.PRODUCTION):
        # TODO: Turn off debug
        app.run(host='0.0.0.0', port=port, debug=True)
    else:
        app.run(host='0.0.0.0')
  

Как мне выполнить первую миграцию для создания таблиц.

Ответ №1:

Используйте эту команду :

     python manage.py db migrate
  

А для настроек миграции базы данных попробуйте что-то вроде этого :

     import os
    from flask.ext.script import Manager
    from flask.ext.migrate import Migrate, MigrateCommand

    from app import app, db


    app.config.from_object(os.environ['APP_SETTINGS'])

    migrate = Migrate(app, db)
    manager = Manager(app)

    manager.add_command('db', MigrateCommand)


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

Для получения дополнительных знаний читайте здесь.

Комментарии:

1. Привет, Пракхар, спасибо за ответ. Я реализовал код, но при запуске «python manage.py перенос базы данных» вызывает «Файл «migrations/env.py «, строка 23, в <module> target_metadata = current_app.extensions[‘migrate’].db.ошибка атрибута метаданных: у объекта ‘module’ нет атрибута ‘metadata'» можете ли вы помочь мне сэто.

Ответ №2:

 import os
from flask.ext.script import Manager
from flask.ext.migrate import Migrate, MigrateCommand

from app import app, db


app.config.from_object(os.environ['APP_SETTINGS'])

migrate = Migrate(app, db)
manager = Manager(app)

manager.add_command('db', MigrateCommand)


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

Используйте команду:
flask db migrate -m ‘comments’
обновление flask db