flask-migrate遷移資料檢測不到模型,無法新建表
阿新 • • 發佈:2021-10-28
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 app 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. 遷移步驟
flask db init flask db migrate -m 'Intial ....' flask db upgrade
有一些歷史文章是結合flask-script去解決的,現在不推薦了。
因為flask-script已經遷移到CLI,具體見https://www.cnblogs.com/lynsyklate/p/7693169.html