为了账号安全,请及时绑定邮箱和手机立即绑定

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

标签:
Python

最近在使用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不会有问题,但在迁移的时候,它检测数据库里面有个版本号,就不会去创建表了。


webp

工程migrations文件目录


webp

mysql db table

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

python manage.py db init #初始化,之后生成一个migrations文件夹python mange.py db migratepython 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 ... doneE:\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



作者:淘果果
链接:https://www.jianshu.com/p/7827ddeebc32


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

举报

0/150
提交
取消