」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 將 SQLite 遷移到 MySQL。

將 SQLite 遷移到 MySQL。

發佈於2024-11-08
瀏覽:875

我介紹一下自己,我是 Alfredo Riveros,我已經學習程式設計多年了,我目前正在 Río Tercero 高等商業學院學習軟體開發高級技術員,下面我將描述我面臨的挑戰遭遇。

正如標題所說,我的目標是將 SQLite 資料庫遷移到 MySQL,這是由我正在接受的資料庫主題中的作業引起的。

我選擇的資料庫屬於遊戲SQL謀殺之謎。這款遊戲旨在以有趣的方式教授 SQL 技能,可透過此連結下載,您可以在其中下載其開發人員提供的資料庫。

我選擇這個資料庫是因為它的教學方向,因為雖然它本身就是一個遊戲,但它為與資料庫相關的教學和學習概念構成了寶貴的資源。

我在這個挑戰中的第一步是調查我是否可以使用DB Browser for SQLite以與MySQL Workbench相容的格式匯出資料庫。儘管我設法從 DB Browser 生成 SQL 腳本,但將其導入 Workbench 卻帶來了許多問題,尤其是語法和資料完整性,此外還存在管理如此大檔案的複雜性。

Migrar de SQLite a MySQL.

Migrar de SQLite a MySQL.

我研究了這個文件並嘗試解決語法問題,最後得出的結論是我應該尋找另一種方法。

我的下一步是使用sqlite3函數透過終端(linux)匯出sql腳本。

Migrar de SQLite a MySQL.

這次腳本在語法上改進了很多,但最大的問題是總是出現一個或另一個新問題。

兩種方法都用盡後,我花了一些時間思考和評估其他替代方案。我認為 Python 可能是這種遷移的有效工具,因為它支援 SQLite 和 MySQL,並開始設計一種演算法來自動化這個過程。

因此,我尋找有關該主題的信息,首先驗證這是一種可能的方法,並收集信息以便能夠設計一種演算法來實現我的目標。

現在我將簡要地描述我實現目標的成功新方法。
我做的第一件事就是一步一步記錄我的研究,這讓我了解了一種叫做物件關係映射(ORM)的東西。

物件關係映射 (ORM) 是一種程式設計技術,用於在物件導向程式語言中的不相容型別系統之間轉換資料。在資料庫上下文中,ORM 允許您透過物件與關聯式資料庫交互,而不是直接使用 SQL 查詢。這提供了一種更直觀、更有效率的數據處理方式。

在我的例子中,我使用SQLAlchemy在Python中進行演算法的開發,並分析結果我發現了以下關鍵點。

  • 像表這樣的類別
    • 您定義的每個類別(例如crime_scene_report、drivers_license等)都對應於資料庫中的一個表格。類別屬性代表表的列。
  • 實例作為行
    • 類別的每個實例代表對應表中的一行。當您從 SQLite 查詢資料時,您將獲得這些類別的實例,這使得資料處理更加直觀和物件導向。
  • 插入與更新操作
    • 使用 merge() 等方法可以讓您直接對這些實例進行操作。您可以插入新記錄或更新現有記錄,而無需手動編寫 SQL 查詢,這簡化了程式碼並使其更具可讀性。
  • 關係管理
    • SQLAlchemy透過類別中的屬性自動處理表之間的關係(例如,透過外鍵),從而更容易在相關記錄之間導航。

Migrar de SQLite a MySQL.

在經過各種嘗試和錯誤之後,在此過程中需要注意的重要一點是,理解該方法並評估編寫的程式碼至關重要,因為它可以幫助您識別可能出現問題的地方。經過一番思考和停頓後,我得出的結論是,問題可能與資料庫結構有關。然而,有一個問題一直縈繞在我的腦海中:儘管存在完整性問題和出現的各種錯誤,這個資料庫如何能夠在 SQLite 中運作?答案很簡單:與 MySQL 不同,SQLite 允許您擁有沒有主鍵的表,這導致兩個系統之間的資料管理存在巨大差異。 SQLite 中的這種靈活性可以掩蓋在 MySQL 等限制性更強的環境中會立即導致錯誤的問題。

另一個差異是 MySQL 對資料結構和型別有更嚴格的方法。例如,如果將欄位定義為 INTEGER,則將無法插入非數字值。

差異仍在繼續,理解它們的結果是認識到要使方法起作用,資料庫中必須進行更改,為此我決定修改表並確保它們符合MySQL 標準,第一件事是每個都有其主鍵,並且我確保兩者俱有相同的資料類型。

我補充...如果您想做同樣的事情,請記住 SQLite 不允許您直接更改表,這是與 MySQL 的另一個巨大區別。

最後,在腳本和用 python 編寫的演算法中進行了調整後,我開始執行它。結果:遊戲資料庫遷移到MySQL。

這項挑戰不僅提高了我的技術技能,還教會了我了解資料庫管理系統之間差異的重要性以及這些差異如何影響資料庫的完整性。

我希望我將資料庫從 SQLite 遷移到 MySQL 的經驗對您有所幫助和啟發。每個挑戰都提供了在程式設計世界中學習和成長的機會。
感謝您的閱讀,下次再見!

版本聲明 本文轉載於:https://dev.to/silvio_riveros_49b5505866/migrar-de-sqlite-a-mysql-217i?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3