問題複現:
INFO [alembic.runtime.migration] Context impl SQLiteImpl.
INFO [alembic.runtime.migration] Will assume non-transactional DDL.
INFO [alembic.env] No changes in schema detected.
複制
配置檔案:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
#
# Authors: limanman
# 51CTOBG: http://xmdevops.blog.51cto.com/
# Purpose:
#
"""
from __future__ import absolute_import
# 說明: 配置基類
class __Config(object):
# -- flask-pids
PID_FILE = 'logs/xmzoomeye-mtr.pid'
# -- flask-sqlalchemy
SQLALCHEMY_ECHO = True
SQLALCHEMY_RECORD_QUERIES = True
SQLALCHEMY_NATIVE_UNICODE = True
SQLALCHEMY_TRACK_MODIFICATIONS = True
SQLALCHEMY_COMMIT_ON_TEARDOWN = True
SQLALCHEMY_DATABASE_URI = 'sqlite:///app/conf/mtrdata.db'
@staticmethod
def init_app(app):
pass
# 說明: 開發環境
class __DevelopmentConfig(__Config):
pass
# 說明: 預測環境
class __TestingConfig(__Config):
pass
# 說明: 正式環境
class __ProductionConfig(__Config):
pass
config = {
'default': __DevelopmentConfig,
'develop': __DevelopmentConfig,
'testing': __TestingConfig,
'product': __ProductionConfig,
}
複制
問題排查:
1. 此應用為一個網絡檢測展示程式,為了簡化就沒有使用任務隊列,直接後端跑一個mtr檢測,利用協程的方式不影響前端資料擷取和展示
2. 架構寫好後發現遷移指令python xmzoomeye-mtr db init時發現flask-migrate竟然沒有檢測到我定義的表....., 這是什麼鬼?
3. 後來無意間看到網上的一段代碼突然發現...自己沒有在任何一個檔案中導入過自定義的表....動手嘗試~ 竟然成功.... 原來flask-migrate是檢測上下文中db.Model的子類來建立表的...
解決方案:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
#
# Authors: limanman
# OsChina: http://xmdevops.blog.51cto.com/
# Purpose:
#
"""
# 說明: 導入公共子產品
from app import db as _db
from app import create_app
# 說明: 為資料庫檢測
from app.models import Area, Addr, Info
from flask_script import Manager, Command
from flask_migrate import Migrate, MigrateCommand
# 說明: 導入其它子產品
app = create_app()
manager = Manager(app)
migrate = Migrate(app, _db)
manager.add_command('db', MigrateCommand)
if __name__ == '__main__':
manager.run()
複制
說明: 既然檢測上下文中的db.Model的子類,是以隻要在任意正确位置導入即可被檢測到,so~ 為了友善我直接在入口檔案中添加了~嘗試再次初始化/遷移/更新~
再次建立:
D:\XmDevOps_Py\test\xmzoomeye-mtr>python xmzoomeye-mtr db init
Creating directory D:\XmDevOps_Py\test\xmzoomeye-mtr\migrations ... done
Creating directory D:\XmDevOps_Py\test\xmzoomeye-mtr\migrations\versions ... don
e
Generating D:\XmDevOps_Py\test\xmzoomeye-mtr\migrations\alembic.ini ... done
Generating D:\XmDevOps_Py\test\xmzoomeye-mtr\migrations\env.py ... done
Generating D:\XmDevOps_Py\test\xmzoomeye-mtr\migrations\env.pyc ... done
Generating D:\XmDevOps_Py\test\xmzoomeye-mtr\migrations\README ... done
Generating D:\XmDevOps_Py\test\xmzoomeye-mtr\migrations\script.py.mako ... done
Please edit configuration/connection/logging settings in 'D:\\XmDevOps_Py\\test\
\xmzoomeye-mtr\\migrations\\alembic.ini' before proceeding.
D:\XmDevOps_Py\test\xmzoomeye-mtr>python xmzoomeye-mtr db migrate
INFO [alembic.runtime.migration] Context impl SQLiteImpl.
INFO [alembic.runtime.migration] Will assume non-transactional DDL.
INFO [alembic.autogenerate.compare] Detected added table 'areas'
INFO [alembic.autogenerate.compare] Detected added index 'ix_areas_areaname' on
'['areaname']'
INFO [alembic.autogenerate.compare] Detected added table 'addrs'
INFO [alembic.autogenerate.compare] Detected added index 'ix_addrs_addr' on '['
addr']'
INFO [alembic.autogenerate.compare] Detected added table 'infos'
Generating D:\XmDevOps_Py\test\xmzoomeye-mtr\migrations\versions\e5295ab2586d_.p
y ... done
D:\XmDevOps_Py\test\xmzoomeye-mtr>python xmzoomeye-mtr db upgrade
INFO [alembic.runtime.migration] Context impl SQLiteImpl.
INFO [alembic.runtime.migration] Will assume non-transactional DDL.
INFO [alembic.runtime.migration] Running upgrade -> e5295ab2586d, empty messag
e
複制