数据库04sqlite转mysql

基本思路:sqlite导出sql保存到mysql

1,sqlite导出sql,手工替换
2,sqlite导出sql,脚本替换
3,makemigrations生成mysql表,数据:sqlite=>csv=>mysql
4,django主从数据库机制,将sqlite同步到mysql

sqlite导出sql

1
2
3
4
sqlite3 database.sqlite3
sqlite3> .output /path/to/dump.sql
sqlite3> .dump
sqlite3> .exit

or

1
sqlite3 database.sqlite3 .dump

01,sqlite=>mysql语句修改

为了保证SQL语句的兼容,需要将SQLite的特有的格式,修改为MySQL的格式。下面为我总结的一般规则(下面的方括号应被忽略):

1
2
3
4
5
6
7
8
9
10
将 ["] 改为 [`]
也可以移除全部的 ["] ,但是如果有一些函数名作为字段名(e.g. regexp)时将会遇到错误
需要注意一些默认为 ["] ,其作用不在字段上的,不应被替换而应当被保留
移除所有的 [BEGIN TRANSACTION] [COMMIT] 以及 任何包含 [sqlite_sequence] 的(整)行
将所有 [autoincrement] 改为 [auto_increment]
将所有 ['f'] 改为 ['0'] 并将所有 ['t'] 改为 ['1']
或者['False']改为['0']及['True']改为['1']
text字段不能设置unipue,需改为varchar(255)
注意sqlite是不区分类型的,所以有些整形字段和text字段要修改配合mysql。
默认设为CURRENT_TIMESTAMP的字段类型一定为TIMESTAMP。

将修改完的文件保存。
放弃,太麻烦且容易错,无法复用。

02,sqlite转mysql格式脚本

01,https://github.com/vwbusguy/sqlite-to-mysql
02,(包含2不同脚本)Quick easy way to migrate SQLite3 to MySQL? [closed]:https://stackoverflow.com/questions/18671/quick-easy-way-to-migrate-sqlite3-to-mysql

以上脚本收集整合到githubsqlite-to-mysql
可惜的是没有一个可以直接使用的,简单的表可以搞定,一旦涉及复杂的字段,比如datetime等,就会踩坑。
放弃!

03,makemigrations方案

django makemigrations生成mysql表,数据:sqlite=>csv=>mysql
前半部分可以:makemigrations在mysql创建新表
后半部分不行:csv数据sqlite导出导入mysql,失败。django支持利用json导出导入数据,也失败。

Django2 SQLite3迁移到MySQL数据库:https://www.jianshu.com/p/6b28f7dbc1fa
django sqlite数据库导出迁移到mysql数据库方法:https://blog.csdn.net/YPL_ZML/article/details/91892306

04,django主从数据库机制

主要参考:
django sqlite3迁移到mysql:www.voidcn.com/article/p-hesvaooz-ru.html
数据表创建成功,但迁移数据时失败。
思路上查询出对象在保存到从数据库是没问题的,实际上由于数据存在主键依赖,导致创建表或记录的前后次序有特定要求,自动查询的化未必符合这种要求。
另一个问题就是这种方案会对django的默认数据表也进行迁移,也会产生主键依赖问题。

总结

没找到合适方案可以简单快速的迁移,最后采用03方法,django在mysql生成新表。由于目前测试数据并不多,所以数据由各个模块开发人员自行初始化。

参考

将sqlite3中数据导入到mysql中的实战教程:https://www.jb51.net/article/118379.htm
sqlite导入到mysql:https://www.cnblogs.com/goldenstones/articles/9185950.html

数据库系列
数据库01mysql常用操作速查
数据库02mongodb异常错误
数据库03mongodb占用磁盘空间过大
数据库04sqlite转mysql
数据库05redis常用命令整理
数据库06redis事务
数据库07redis分布式锁
数据库08redis其他
数据库09mysql常用查询实例
数据库10mysql之坑
数据库11mysql之坑null专题
数据库12经验之谈
数据库13mysql执行计划
数据库14mysql的redolog与binlog
数据库15mysql报错2006
数据库16mysql之初始密码
数据库17mysql锁机制
数据库18mysql事务和MVCC

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×