异常排查_Python.[alembic

发布时间:2019-09-14 09:48:49编辑:auto阅读(1748)

    问题复现:

    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



关键字