Python 不检测表的情况

Python 不检测表的情况,python,postgresql,flask,flask-sqlalchemy,flask-migrate,Python,Postgresql,Flask,Flask Sqlalchemy,Flask Migrate,我有以下项目结构: project/\uuuuu init\uuuuu.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

我有以下项目结构:

project/\uuuuu init\uuuuu.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
from project import create_app
app = create_app()

if __name__ == "__main__":
    app.run()
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()
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)

    blueprint = Blueprint('api', __name__, url_prefix=url_prefix)
    api = Api(blueprint, doc='/documentation')  # ,doc=False

    app.register_blueprint(blueprint)
    api.add_namespace(api_user)

return app
run.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
from project import create_app
app = create_app()

if __name__ == "__main__":
    app.run()
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()
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)

    blueprint = Blueprint('api', __name__, url_prefix=url_prefix)
    api = Api(blueprint, doc='/documentation')  # ,doc=False

    app.register_blueprint(blueprint)
    api.add_namespace(api_user)

return app
管理.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
from project import create_app
app = create_app()

if __name__ == "__main__":
    app.run()
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()
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)

    blueprint = Blueprint('api', __name__, url_prefix=url_prefix)
    api = Api(blueprint, doc='/documentation')  # ,doc=False

    app.register_blueprint(blueprint)
    api.add_namespace(api_user)

return app
但是,当我运行以下命令时,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.

它只输出:

INFO  [alembic.runtime.migration] Context impl PostgresqlImpl.
INFO  [alembic.runtime.migration] Will assume transactional DDL.
为什么Flask Migrate with Alembic没有检测到模型并因此创建表?以下是我尝试过的:

  • 从零开始删除数据库
  • 在manage.py文件中创建自定义db类时,不会检测到这一点
  • 谷歌搜索了这个问题的每一个答案,发现了很多类似的问题,但他们的解决方案都不适合我
编辑:

下面是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))

解决方案是将模型导入到_init__u; py.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

我也有同样的问题。这个解决方案与@joe的非常相似

路由文件中的

from models import User

api_user = Namespace('user', description='user related operations')
在项目中/\uuuu init\uuuuu.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
from project import create_app
app = create_app()

if __name__ == "__main__":
    app.run()
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()
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)

    blueprint = Blueprint('api', __name__, url_prefix=url_prefix)
    api = Api(blueprint, doc='/documentation')  # ,doc=False

    app.register_blueprint(blueprint)
    api.add_namespace(api_user)

return app

在create_app flask_migrate检测到的模型中添加api_用户名称空间时

您的模型是什么样子?@wgwz my models.py文件太大,无法共享整个内容,但我只提供了一个相关示例。我的模型没有问题,因为我可以在shell中成功地使用db.create_all()。我认为这可能是因为您在多个位置创建了db对象。与manage.py.id相比,您最好使用实例化flask extensions project/\uuuu init\uuuuuuu.py的方法。我猜您正在覆盖manage.py中的db实例。显示models.py bc很重要。import语句可以解释为什么它不起作用