flask migrate无法创建迁移脚本的问题

作者: 果果酱ya | 来源:发表于2018-10-18 15:35 被阅读90次

    最近在使用flask写个小平台,遇到一个flask migrate无法创建迁移脚本的问题,记录下。

    正常我们使用flask-migrate时,步骤是:

       python manage.py db init #初始化,工程目录下生成一个migrations文件夹
       python mange.py db migrate
       python manage.py db upgrade
    

    需要确认你之前的操作步骤为以上三步。(初始化为三个步骤,之后的迁移只需要执行后两个步骤)

    我在models.py里面开始创建了几个模型,但后面由于另外一个问题“mysql字符编码的问题导致我一个加密数据字段写不进数据库”,解决方法里面“修改mysql的字符编码格式对已经创建的表是不生效的 ”,所以就把DB里面的表全部删掉了。重启mysql服务后,接下来我就需要执行这两个 migrate, upgrade 迁移步骤。但真是特别尴尬的,不报错,DB也不生成表。
    执行迁移的两个命令是下面这样子的。

      E:\00practice_python\zhileqa20180914>python manage.py db  migrate
      INFO  [alembic.runtime.migration] Context impl MySQLImpl.
      INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
    
      E:\00practice_python\zhileqa20180914>python manage.py db  upgrade
      INFO  [alembic.runtime.migration] Context impl MySQLImpl.
      INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
    

    尝试把工程里面的目录migrtions 删掉,从init命令从新开始走一遍,但也还是没有在db里面生成表。

    为啥呢?为啥呢?

    解决方法:
    因为第一次init的时候,数据库中在创建table的同时,也创建了一张alembic_version表,这个表里面只有一个version_sum字段,它记录的版本号,和我们init命令在工程下生成的 migrations下面的versions的一个py文件是一样的。
    由于我们删掉表的时候,没有把这个自己生成的alembic_version表删掉,我们只删掉工程下面migrations的时候,init不会有问题,但在迁移的时候,它检测数据库里面有个版本号,就不会去创建表了。


    工程migrations文件目录
    mysql db table

    最终,删掉数据库里面的alembic_version表,删掉工程下生成的 migrations文件目录。
    执行下面三个命令。

    python manage.py db init #初始化,之后生成一个migrations文件夹
    python mange.py db migrate
    python manage.py db upgrade
    

    问题解决:)

    E:\00practice_python\zhileqa20180914>python manage.py db  migrate
    INFO  [alembic.runtime.migration] Context impl MySQLImpl.
    INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
    INFO  [[alembic.autogenerate.compare](http://alembic.autogenerate.compare/)] Detected added table 'user'
    INFO  [[alembic.autogenerate.compare](http://alembic.autogenerate.compare/)] Detected added table 'question'
    INFO  [[alembic.autogenerate.compare](http://alembic.autogenerate.compare/)] Detected added table 'comment'
    Generating 
    E:\00practice_python\zhileqa20180914\migrations\versions\d67e41ceca98_.py ... done
    
    
    
    E:\00practice_python\zhileqa20180914>python manage.py db  upgrade
    INFO  [alembic.runtime.migration] Context impl MySQLImpl.
    INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
    INFO  [alembic.runtime.migration] Running upgrade  -> d67e41ceca98, empty message
    

    相关文章

      网友评论

        本文标题:flask migrate无法创建迁移脚本的问题

        本文链接:https://www.haomeiwen.com/subject/baqszftx.html