异常排查_Python.[alembic.env] No changes in schema detected?

问题复现:

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



优秀的个人博客,低调大师

微信关注我们

原文链接:https://blog.51cto.com/xmdevops/1864462

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
Mario,低调大师唯一一个Java游戏作品

Mario,低调大师唯一一个Java游戏作品

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Apache Tomcat7、8、9(Java Web服务器)

Apache Tomcat7、8、9(Java Web服务器)

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

Java Development Kit(Java开发工具)

Java Development Kit(Java开发工具)

JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。

Sublime Text 一个代码编辑器

Sublime Text 一个代码编辑器

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。