Django数据从sqlite迁移数据到MySQL

昨天快速搭建了一套自己的知识库

感觉一下子有了很多的事情要做,至少得让自己用得舒服些。

没想到有了这个小工具之后,我发现我之前过得真是刀耕火种的信息收集。为什么这么说,因为我们每天都会读大量的文章,如果你决定收藏了,在微信里面就默默的点击“收藏”,然后不知不觉,已经收藏了成百上千篇,微信收藏的文章有个缺点就是我们在手机端很难去管理,通过关键字或者其他标签可以搜索出来,但是屏幕里只能显示出来差不多3-4条信息。如果想根据时间去排序之类的基本上无法实现,我也一直纳闷目前没有见到一个很给力的工具来管理收藏夹。

这仅仅是手机端的,如果是电脑端,那就更多了,我们的浏览器有收藏夹,但是本身没有排序功能,如果要做更多的筛选,基本靠眼里。

而且比较纠结的就是,有时候一打开一下子翻腾出所有的文章,顿时就会让人有些眩晕,而且作为书签,本身没有层级感。

哪怕做了细致的分类,但是一个目录下还是难免会生成大量的链接,完全无法排序。

所以我就退而求其次,把一些链接写道每天的工作记录里面,但这样明显更糟糕,因为这些信息我不去找,压根找不到。所以想想真是悲凉,我遗失了多少重要的信息。

然后我痛下决心,先改善自我生活,比如下面的url管理方式,我可以指定排序的规则。做多个类别的拆分,而且更重要的基于web,如果用Django的admin模板,完全不用写前端页面了。

所以我风风火火用了windows里的配置,为了简化,用了sqlite存储数据,很快就配置了30多条的url信息。

大类别分了这些,所以可以看出来我想做的不是一个简单的url收集,而想让它变得更有意思。不局限于技术方向。

说了这么多,这么做马上就碰到了一个潜在的问题,数据库是sqlite,而我们实际使用肯定是MySQL,从使用和数据安全性上来说,我们更倾向于用MySQL,但是sqlite和MySQL本身不是完全兼容的,怎么同步这些数据。

管理sqlite很简单,数据都存放在一个看起来很普通的文件里面,我们只需要解析这一个文件即可。它更适合于嵌入式,本身是不支持事务的。

怎么把sqlite的数据同步到MySQL就是摆在我面前的一个问题。

我做了快速的尝试,用了如下的方式,仅供参考。

把sqlite的数据文件拷贝到linux里面,因为我正式的服务都是在linux下,同样的应用我使用了MySQL,这个数据文件有个好处就是从windows拷贝到linux,还是能够正常解析的,登录使用命令sqlite3即可。

查看sqlite的数据库情况如下,语法和命令略有差异。

sqlite> .databases

seq name file

--- --------------- -----------------------

0 main /root/test/db.sqlite3

目前存在的表有这些。

sqlite> .tables

auth_group django_content_type

auth_group_permissions django_migrations

auth_permission django_session

auth_user km_child_category

auth_user_groups km_parent_category

auth_user_user_permissions km_url_info

django_admin_log

这么多的表怎么同步呢,其实是做一个选择,我们建立的models.py里面的信息是需要的,也就意味着我们只需要同步其中的3个表即可。

我们使用.dump选项即可轻松导出数据。

sqlite3 db.sqlite3 .dump

得到的SQL类似下面的形式,大部分的语法还是兼容的。

CREATE TABLE "km_parent_category" ("category_pid" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "category_name" varchar(200) NOT NULL, "category_memo" varchar(200) NOT NULL);

INSERT INTO "km_parent_category" VALUES(1,'Python开发技术','test1');

INSERT INTO "km_parent_category" VALUES(2,'MySQL','test2');

INSERT INTO "km_parent_category" VALUES(3,'个人公众号文章','jianrong-notes');

INSERT INTO "km_parent_category" VALUES(4,'人文历史',' ')

如果要导出csv就加-csv选项即可,或者直接生成.sql文件。

如果是sql文件需要去掉脚本里的“”,要不解析会出错。

把SQL部署到MySQL,就行程了一个闭环,我们就可以按照自己的想法来补充完善了。

所以总体来说,迁移还是比较简单的,只要逻辑和结构足够简单,迁移还是比较清晰的。操作大概5分钟就搞定了。

本文来自企鹅号 - 杨建荣的学习笔记媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏架构师之路

InnoDB行锁,如何锁住一条不存在的记录?

《InnoDB,5项最佳实践,知其所以然?》发布后,不少同学留言希望讲讲MySQL的InnoDB行锁机制。要细聊MySQL的行锁,难以避免的要从事务的四种隔离级...

1633
来自专栏Java学习123

mysql数据库开发常见问题及优化

3261
来自专栏性能与架构

优化更须要优化的Query

什么样的Query更须要优化呢? 这个问题须要从对整个系统的影响来考虑。哪个Query的优化能给系统整体带来更大的收益,就更须要优化。 一般来说,高并发低消...

2617
来自专栏数据和云

真实场景下Oracle Sharding的优势比较和选择

编辑手记:Oracle Sharding是为OLTP应用程序定制设计的一种可扩展、支持高可用功能的架构,能够在不具有共享硬件或软件的Oracle数据库池中分发和...

3716
来自专栏程序猿

小米开源soar一款对SQL进行优化和改写的自动化工具

SOAR(SQL Optimizer And Rewriter)是一个对SQL进行优化和改写的自动化工具。 由小米人工智能与云平台的数据库团队开...

2651
来自专栏灯塔大数据

塔秘 | 网站访问速度不够快?快收藏SQL 查询优化技巧

前言 你一定知道,一个快速访问的网站能让用户喜欢,可以帮助网站从Google 上提高排名,可以帮助网站增加转化率。如果你看过网站性能优化方面的文章,例如设置服务...

3485
来自专栏杨建荣的学习笔记

一个复杂数据需求的MySQL方案

前些天处理了一个需求,当时的数据库环境是Oracle,我算是想尽了Oracle相关的方案,而且在问题的处理过程中,还在不断的琢磨,如果失败了还有什么其他的...

3568
来自专栏CDA数据分析师

【干货】大数据量下,58同城mysql实践!

WOT(World Of Tech)2015,互联网运维与开发者大会将在北京举行,会上58同城将分享《大数据量下,58同城mysql实战》的主题,干货分享抢先看...

2819
来自专栏杨建荣的学习笔记

通过top命令抓取cpu高消耗的sql (44天)

top命令在linux环境维护中很实用,虽然功能缺失不够sar那么全面。今天和大家分享一个通过top命令来抓取性能sql的案例。 通过top命令抓取了如下的信息...

3976
来自专栏架构师之路

58同城mysql实战(纯干货)

《大数据量下,58同城mysql实践》 WOT(World Of Tech)2015,互联网运维与开发者大会将在北京举行,会上58同城将分享《大数据量下,58同...

5575

扫码关注云+社区

领取腾讯云代金券