Pythoner集中营人生苦短,我学Python玩耍Python

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

2018-10-18  本文已影响90人  果果酱ya

最近在使用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
上一篇下一篇

猜你喜欢

热点阅读