簡體   English   中英

Django、sqlite 到 mysql 遷移,json 遷移頁面的解碼器問題

[英]Django, sqlite to mysql migration, json decoder issue with migrated pages

我有一個早期且簡單的 django 項目,為了開始工作,我們在安裝過程中使用了 sqlite 數據庫。 其他人使用各種插件創建了一些 django 個頁面,但由於這些是實際頁面而不是模板,因此它們存儲在數據庫中。 我們意識到我們應該在制作這些頁面之前遷移到 mysql,現在我們有 2 個選項。 1,我們遷移,他重新構建頁面,這很耗時,或者 2,我們想辦法將 sqlite 數據庫內容遷移到 mysql。

我一直在嘗試找出第二個選項,將我們的 sqlite db 遷移到 mysql。我搜索了谷歌,沒有什么比我想要的更簡單,但我已經能夠創建 sql 轉儲文件,按照一些步驟來改變所述文件的格式,並將所述文件轉儲到新的 mysql 數據庫中。 然而,雖然數據在那里並且我可以訪問管理頁面和新頁面,但當我嘗試查看頁面或將它們復制並粘貼到 django 管理頁面時,遷移的頁面都會遇到錯誤。 為了清楚起見,我在遷移之前創建了一個幾乎空白的頁面(現在嘗試了幾次)以查看是否會遇到錯誤,但事實並非如此。 錯誤如下圖

在此處輸入圖像描述 在此處輸入圖像描述

對於上下文,這是 django 3.2、ptyhon 3.10、mysqlclient 2.1.1,我們在此項目中使用 docker,但這似乎與此問題無關。 我的猜測是,我為使 sql 轉儲文件工作而進行的調整導致了引號更改中的問題。 以下是我為遷移數據所做的步驟列表以及我對轉儲文件所做的調整:

  1. 像這樣創建轉儲文件:sqlite3 data/db.sqlite3.dump > dump.sql
  2. 編輯文件:刪除行:PRAGMA foreign_keys=OFF;
  3. 編輯文件:更改 BEGIN TRANSACTION -> BEGIN
  4. 編輯文件:更改 AUTOINCREMENT -> AUTO_INCREMENT
  5. 編輯文件:找到所有帶有sqlite_sequence的行並刪除,mysql中沒有使用
  6. 編輯文件:將所有雙引號 "" 替換為 `` 標記(編輯:完整解決方案見下文,但僅替換以下行中的雙引號:CREATE UNIQUE INDEX、CREATE INDEX 和 CREATE TABLE IF NOT EXISTS)
  7. 編輯文件:最后,有一些創建唯一索引的行名稱太長,所以我不得不縮短它們,例如:將名稱從下面的行更改為blog_markdownpost_categories_id_3007eb9a_uniq

創建唯一索引blog_markdownpost_categories_markdownpost_id_blogcategory_id_3007eb9a_uniq ON blog_markdownpost_categories ( markdownpost_id , blogcategory_id );

  1. 最后,我像這樣將所述文件轉儲到 mysql 中:mysql -u root -p"password_here" db_name < dump.sql

這些步驟適用於移動數據,我認為將雙引號大量更改為 `` 可能在某處引起了問題。 有人有任何提示或想法嗎? 如果需要,我可以進一步詳細說明。

實際上,我在發表這篇文章后不久就想出了解決方案,但如果其他人需要幫助,這里是解決方案。 我上面的步驟基本上可以將 sqlite 遷移到 mysql。但是,正如我所懷疑的那樣,質量將所有雙引號 "" 替換為導致問題的``。 即,將幾行插入插件和文本中,如下所示:

插入 custom_plugins_customtext VALUES(10,replace(replace('\r....

這些行需要保留雙引號,因此您必須查找並替換以下任何行中的雙引號,而不是上面列表中的第 6 步:CREATE UNIQUE INDEX、CREATE INDEX 和 CREATE TABLE IF NOT EXISTS。 乏味,但我使用查找和替換來編輯這些行並忽略 rest,這解決了問題,頁面現在工作正常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM