MySQL迁移至SQLite

由于最近学习了Django,想着不然把自己的Blog从Typecho迁移到Django的框架中,其实上层差别不是特别大,一个是PHP一个是Python。下层的话,由于我初学Django基本的教程都是通过SQLite作为默认的数据库的。刚好我做Android开发的时候,其实数据库使用的就是SQLite。因此着手把数据库进行迁移下。遇到了一些坑,记录一下。

网上很多SQLite转MySQL的教程,唯独没有MySQL转SQLite的方案。找了几个,大体上的方案都很类似。先将MySQL的DB转换成txt格式,通过批处理修改一下创建表的语法,然后在生成一个SQLite的数据库。实际操作起来不是特别方便,我选择了这个回答下面的方案。

得益于dumblob这位开发者开源的这个项目,我在服务器端通过mysqldump和它的脚本生成了一个SQLite3的DB,将其考到本地。

由于这个脚本只是生成表结构的,并没有将数据导入进来,所以下一步的计划是将数据导入到新生成的SQLite3DB中。

在导入的过程中发现了,若按照正常的生成语句是无法写入NULL数据

template = models.IntegerField(blank=True)
这样生成的字段,在通过insert命令的时候,没法写入NULL数据,这导致我从MySQL导出的sql语句没法正常运行。修改成
template = models.IntegerField(blank=True, null=True)
就解决了上述问题。

接下来又遇到了另外一个坑,就是SQLite3的Table是没法drop某一个列的。这个就无比蛋疼了。解决方案也很简单:拷贝需要的字段到一个新表中,删除旧表,重命名新表

INSERT INTO newtable select a,b,c from oldtable
下午了再试试看。

搞定。