【教程】Sqlite迁移到mysql(django)

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迁移已经执行过了。

反复多次,报错 <->修改,直到导入时没有错误。

猜你喜欢

转载自blog.csdn.net/ab6326795/article/details/134531364
今日推荐