Flask-Migrate не обнаруживая таблицы

1

У меня есть следующая структура проекта:

проект/__ init__.py

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate

db = SQLAlchemy()
migrate = Migrate()

def create_app():
    app = Flask(__name__)
    app.config.from_object(os.environ['APP_SETTINGS'])

    db.init_app(app)
    migrate.init_app(app, db)

    return app

run.py

from project import create_app
app = create_app()

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

manage.py

from flask_script import Manager
from flask_migrate import MigrateCommand
from project.models import *
from project import create_app


manager = Manager(create_app)
manager.add_command('db', MigrateCommand)

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

Однако, когда я запускаю следующие команды, Flask-Migrate не обнаруживает никаких таблиц, которые нужно добавить.

python manage.py db init

Какие результаты:

Creating directory $HOME/Project/migrations ... done
Creating directory $HOME/Project/migrations/versions ... done
Generating $HOME/Project/migrations/script.py.mako ... done
Generating $HOME/Project/migrations/env.py ... done
Generating $HOME/Project/migrations/README ... done
Generating $HOME/Project/migrations/alembic.ini ... done
Please edit configuration/connection/logging settings in
'$HOME/Project/migrations/alembic.ini' before proceeding.

а также

python manage.py db migrate

Какие только выходы:

INFO  [alembic.runtime.migration] Context impl PostgresqlImpl.
INFO  [alembic.runtime.migration] Will assume transactional DDL.

Почему Flask-Migrate с Alembic не обнаруживает Модели и поэтому создает таблицы? Вот что я пробовал:

  • Удаление базы данных, начиная с нуля
  • Создание пользовательского класса db внутри файла manage.py не обнаруживает, что
  • Гуглинг каждого ответа на эту проблему, нашел много подобных вопросов, но ни один из их решений не работал для меня.

РЕДАКТИРОВАТЬ:

Ниже приведен пример файла models.py

from flask import current_app
from project import db
from flask_login import UserMixin

class User(db.Model, UserMixin):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50))
  • 0
    как выглядят ваши модели?
  • 0
    @wgwz мой файл models.py слишком большой, чтобы поделиться им целиком, но я включил только соответствующий пример. Это не проблема с моими моделями, так как я могу успешно использовать db.create_all () в оболочке
Показать ещё 12 комментариев
Теги:
flask
flask-sqlalchemy
flask-migrate

1 ответ

1
Лучший ответ

Решение заключалось в том, чтобы импортировать модели в файл __init__.py следующим образом:

def create_app():
    app = Flask(__name__)
    app.config.from_object(os.environ['APP_SETTINGS'])

    from project import models

    db.init_app(app)
    migrate.init_app(app, db)

    return app

Ещё вопросы

Сообщество Overcoder
Наверх
Меню