预计所需阅读时间:3分钟

最近在学习Python里面网页开发框架Flask开发小型博客CMS系统,使用flask_sqlalchemy模块用ORM的方法连接数据库。因为跟着视频来学,教程是用sqlite这个小型的数据库,而老师提到在更新升级sqlite数据库时容易出现问题,就要删掉数据库,用db.create_all()方法重建数据库。

开始时,只有用户管理和文章管理功能,只有文章和用户两个数据库,删库重建当然没什么大问题,因为可以用随机函数批量生成用户和文章。但后而有了分类目录的数据库,然后又在文章里面加上缩略图和被推荐的字段,如果这时还删库重建,那么不仅文章没有了,里面缩略图的链接地址也没了。

在这过程中,使用flask_migrate升级sqlite数据库,发现重建数据库第一次升级数据库是没有问题的,但再次升级时会出现一些问题,仔细看那些错误提示,还是找到了方法解决连续升级sqlite数据库的问题。解决的过程如下。

第一,在Article数据库的类中增加一个或多个字段:

原来没有is_recommend字段的,现在加上去。

第二,因为之前有一次更新,所以现在第二次更新输入'flask db init'会出现以下错误提示:

意思是说migrations目录已经有了而且非空。所以这里我们把项目文件目录下migrations目录剪切移动到其它地方。

然后,我们再次执行'flask db init'命令就没问题了。

第三,初始化后,再执行迁移命令"flask db migrate -m "说明""时,会出现以下错误:

大概意思是找不到版本确认文件'9f1b36b7689f',这里我们就是要在原来移到外面的migrations目录下面versions目录下,所有用来区分数据库版本的py文件,将它们移回现在项目文件夹下\migrations\versions\同样的地方。

再执行迁移命令"flask db migrate -m "说明""就可以顺利迁移数据库版本了。

第四,最后执行'flask db upgrade'命令,完成更新:

连接数据库也能找到新增的字段。这样就可以解决连续升级sqlite数据库出现的错误

PS:后来,我尝试将原有字段'username = db.Column(db.String)'加上唯一语句'unique=True'会出现另外的错误,暂时解决不了。所以,看来这种方法只能解决大部分sqlite升级问题,不能解决所有问题。