Django資料從sqlite遷移資料到MySQL

jeanron100發表於2017-12-18

昨天快速搭建了一套自己的知識庫

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

沒想到有了這個小工具之後,我發現我之前過得真是刀耕火種的資訊收集。為什麼這麼說,因為我們每天都會讀大量的文章,如果你決定收藏了,在微信裡面就默默的點選“收藏”,然後不知不覺,已經收藏了成百上千篇,微信收藏的文章有個缺點就是我們在手機端很難去管理,透過關鍵字或者其他標籤可以搜尋出來,但是螢幕裡只能顯示出來差不多3-4條資訊。如果想根據時間去排序之類的基本上無法實現,我也一直納悶目前沒有見到一個很給力的工具來管理收藏夾。

這僅僅是手機端的,如果是電腦端,那就更多了,我們的瀏覽器有收藏夾,但是本身沒有排序功能,如果要做更多的篩選,基本靠眼裡。

而且比較糾結的就是,有時候一開啟一下子翻騰出所有的文章,頓時就會讓人有些眩暈,而且作為書籤,本身沒有層級感。

哪怕做了細緻的分類,但是一個目錄下還是難免會生成大量的連結,完全無法排序。

Django資料從sqlite遷移資料到MySQL

所以我就退而求其次,把一些連結寫道每天的工作記錄裡面,但這樣明顯更糟糕,因為這些資訊我不去找,壓根找不到。所以想想真是悲涼,我遺失了多少重要的資訊。

然後我痛下決心,先改善自我生活,比如下面的url管理方式,我可以指定排序的規則。做多個類別的拆分,而且更重要的基於web,如果用Django的admin模板,完全不用寫前端頁面了。

Django資料從sqlite遷移資料到MySQL

所以我風風火火用了windows裡的配置,為了簡化,用了sqlite儲存資料,很快就配置了30多條的url資訊。

大類別分了這些,所以可以看出來我想做的不是一個簡單的url收集,而想讓它變得更有意思。不侷限於技術方向。

Django資料從sqlite遷移資料到MySQL

說了這麼多,這麼做馬上就碰到了一個潛在的問題,資料庫是sqlite,而我們實際使用肯定是MySQL,從使用和資料安全性上來說,我們更傾向於用MySQL,但是sqlite和MySQL本身不是完全相容的,怎麼同步這些資料。

管理sqlite很簡單,資料都存放在一個看起來很普通的檔案裡面,我們只需要解析這一個檔案即可。它更適合於嵌入式,本身是不支援事務的。

怎麼把sqlite的資料同步到MySQL就是擺在我面前的一個問題。

我做了快速的嘗試,用瞭如下的方式,僅供參考。

  1. 把sqlite的資料檔案複製到linux裡面,因為我正式的服務都是在linux下,同樣的應用我使用了MySQL,這個資料檔案有個好處就是從windows複製到linux,還是能夠正常解析的,登入使用命令sqlite3即可。

  2. 檢視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個表即可。

  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,'人文歷史',' ')

  4. 如果要匯出csv就加-csv選項即可,或者直接生成.sql檔案。

  5. 如果是sql檔案需要去掉指令碼里的“”,要不解析會出錯。

  6. 把SQL部署到MySQL,就行程了一個閉環,我們就可以按照自己的想法來補充完善了。

所以總體來說,遷移還是比較簡單的,只要邏輯和結構足夠簡單,遷移還是比較清晰的。操作大概5分鐘就搞定了。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23718752/viewspace-2148802/,如需轉載,請註明出處,否則將追究法律責任。

相關文章