1、先将sqlite db文件导出sql
sqlite3 db.sqlite3 .dump>output.sql
db.sqlite3 是 sqlite 数据库文件
output.sql是导出sql文件的名称
2、sql文件转换、处理
sed 's/AUTOINCREMENT/AUTO_INCREMENT/g' output.sql | sed 's/datetime/timestamp/g' | sed 's/INTEGER/int/g' > new.sql
sql处理完后可能依然 导入到mysql 会报错,需要额外 根据报错进行处理。
3、导入到mysql
进入mysql,选择数据,然后执行
source /mnt/d/new.sql
4、错误处置
如果导入成功,此步骤跳过即可,
如果失败则根据错误再次处理sql文件
- 比如建表语句错误,那么可能需要手动更正(或建表后导入)
- 比如一些没用的sql语句也可以删除sed '/INSERT INTO auth_/d'
- 有些报错的比如,PRAGMA foreign_keys=OFF; 可以考虑删除
- 针对django sqlite 和mysql转换,我这里是直接先在settings里配置mysql,然后使用django的迁移命令在mysql里先创建空表
- python manage.py makemigrations
- python manage.py migrate
- 然后第2步的时候 sed 's/AUTOINCREMENT/AUTO_INCREMENT/g' output.sql | sed 's/datetime/timestamp/g' | sed 's/INTEGER/int/g' | sed '/CREATE TABLE /d' | sed '/INSERT INTO django_/d' | sed '/INSERT INTO auth_/d' | sed '/INSERT INTO Login_ldapuserdb/d' > new.sql
- 这里特别将“CREATE TABLE” 建表语句删除,将insert auth_ 和 django_ 开头 数据插入也删除,因为django迁移已经执行过了。
反复多次,报错 <->修改,直到导入时没有错误。