flask-migrate迁移数据检测不到模型,无法新建表

 

flask项目目录示例:

project/  
  App/
    __init__.py
ext.py models
/ __init__.py base.py users.py posts.py ... routes/ __init__.py home.py account.py dashboard.py ... templates/ base.html post.html ... services/ __init__.py google.py mail.py ...
runserver.py README.md venv
requirements/
dev.txt
prod.txt

此文先上项目目录结构,跟着项目来看问题。

本文需要解决的问题是1.明确项目文件布局 2.迁移文件检测不到model,现象是migrations/versions目录下为空

1. ext.py

// App/ext.py 

from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

为什么需要一个单独的文件来实例化【SQLAlchemy】呢?

因为实例db在以后的models和runserver.py等多处会引用,避免循环引用。

2. __init__.py

// App/__init__.py
from
flask import Flask from . import config from flask_sqlalchemy import SQLAlchemy from flask_migrate import Migrate from App.models import * from App.ext import db migrate = Migrate() def create_app(): app = Flask(__name__) app.config.from_object(config) db.init_app(app) migrate.init_app(app, db) return app

这里比较重要的是 from app.models import * ,如果不导入models检测不到相应的模型

3. runserver.py

from app import create_app

app = create_app()

app.run()

4. 环境变量

export FLASK_APP=App.runserver

5. 迁移步骤

flask db init
flask db migrate -m 'Intial ....'
flask db upgrade

有一些历史文章是结合flask-script去解决的,现在不推荐了。

因为flask-script已经迁移到CLI,具体见https://www.cnblogs.com/lynsyklate/p/7693169.html

原文地址:https://www.cnblogs.com/zhengze/p/15475500.html