【发布时间】:2018-12-11 05:11:41
【问题描述】:
我的项目结构如下:
project/__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.
为什么使用 Alembic 的 Flask-Migrate 没有检测到模型并因此无法创建表?这是我尝试过的:
- 删除数据库,白手起家
- 在 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))
【问题讨论】:
-
你的模型是什么样的?
-
@wgwz 我的 models.py 文件太大,无法分享整个内容,但我只包含了一个相关示例。这不是我的模型的问题,因为我可以在 shell 中成功使用 db.create_all()
-
啊哈。我认为这很可能是因为您在多个地方创建了 db 对象。使用实例化烧瓶扩展 project/__init__.py 的方法会比在 manage.py 中更好。
-
id 猜测您正在覆盖 manage.py 中的数据库实例
-
重要的是要显示 models.py bc 导入语句可以解释为什么它不起作用
标签: python postgresql flask flask-sqlalchemy flask-migrate