Flask-Migrate碰到的问题

2017-10-20  本文已影响598人  thinkq

Flask-Migrate会生成一个migrations文件夹和在数据库中生成一个alembic_version表

migrations

每次升级数据库,当执行

python manage.py db migrate -m "commit" 

会在migrations\versions下新建一个脚本.py,记录了升级前后差异信息,以便告知Flask-Migrate升级要做哪些动作

03771CD3-4FF5-4A6E-89C2-A8753B77F242.png

如图

alembic_version表

此时数据库中会自动创建一个alembic_version表格,只有一个字段和一个值version_num,记录当前的数据库版本。
执行

python manage.py db upgrade  

数据库会更新,同时更新alembic_version表,记录最新的版本id

问题一

报错如下:

sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) near "DROP": syntax error [SQL: u'ALTER TABLE roles DROP COLUMN typefive']

为了做实验我在Role里添加了好多字段:


model.png table-roles.png

我想删除typefive,先从model删除typefive:

model.png

然后执行到upgrade的时候,报错

google发现是因为:SQLite不支持删除或更改列
那好吧,我不改了。但是这个时候已经是不正常的了。再执行别的命令会报错如下:

alembic.util.exc.CommandError: Target database is not up to date.

因为有最新的更新脚本没有被更新到数据库里,如下:

9084A84F-5D3E-4C32-B088-1094604D281F.png

最简单的办法是删除a1f06e80ab57_delete_five.py,反正SQLite不支持删除或更改列,这个脚本也没用。然后另想办法删除想要删除的列

参考:https://stackoverflow.com/questions/30394222/why-flask-migrate-cannot-upgrade-when-drop-column
这个链接里给出了SQLite删除列的相关解决方案的链接,还没来得及细看

上一篇下一篇

猜你喜欢

热点阅读