Django, миграция с sqlite на mysql, проблема с декодером json для перенесенных страниц

У меня есть ранний и простой проект django, для начала работы мы использовали базу данных sqlite при настройке. Кто-то другой создал несколько django страниц с различными плагинами, но поскольку это реальные страницы, а не шаблоны, они хранятся в базе данных. Мы поняли, что нам следовало перейти на mysql до создания этих страниц, и теперь у нас есть 2 варианта. 1, мы мигрируем и он создает страницы снова, что отнимает много времени, или 2, мы находим способ перенести содержимое базы данных sqlite в mysql.

Я пытался разобраться со вторым вариантом, переносом нашей sqlite базы данных на mysql. Я изучил Google, но ничего не оказалось таким простым, как мне хотелось бы, но я смог создать файл дампа sql, выполнить некоторые шаги по изменению формата этого файла и перенести этот файл в новую базу данных mysql. Однако, хотя данные там есть, и я могу получить доступ к администратору и новым страницам, все перенесенные страницы сталкиваются с ошибкой, когда я пытаюсь просмотреть страницы или скопировать & вставить их в django admin. И для ясности, я создал почти пустую страницу перед миграцией (пробовал это несколько раз), чтобы посмотреть, не приведет ли это к ошибке, но этого не произошло. Ошибка выглядит так, как показано ниже

enter image description here enter image description here

Для контекста, это django 3.2, ptyhon 3.10, mysqlclient 2.1.1, и мы используем docker в этом проекте, но это не имеет отношения к данной проблеме. Я предполагаю, что изменения, которые я сделал, чтобы заставить файл дампа sql работать, вызывают это, проблемы в изменениях кавычек. Вот список шагов, которые я выполнил для переноса данных, и настройки, которые я сделал для файла дампа:

  1. создал файл дампа так: sqlite3 data/db.sqlite3 .dump > dump.sql
  2. .
  3. Редактирование файла: удалить строку: PRAGMA foreign_keys=OFF;
  4. Редактировать файл: изменить BEGIN TRANSACTION -> BEGIN
  5. Edit File: change AUTOINCREMENT -> AUTO_INCREMENT
  6. Edit File: найти все строки с sqlite_sequence и удалить, не используется в mysql
  7. .
  8. Файл редактирования: заменить все двойные кавычки "" на `` знаки
  9. Файл редактирования: Наконец, в некоторых строках CREATE UNIQUE INDEXE были слишком длинные имена, поэтому мне пришлось их сократить, например: измените имя из следующей строки на blog_markdownpost_categories_id_3007eb9a_uniq
  10. .

СОЗДАТЬ УНИКАЛЬНЫЙ ИНДЕКС blog_markdownpost_categories_markdownpost_id_blogcategory_id_3007eb9a_uniqON blog_markdownpost_categories (markdownpost_id, blogcategory_id);

  1. Наконец, я сбросил этот файл в mysql следующим образом: mysql -u root -p "password_here" db_name < dump.sql
  2. .

Эти шаги сработали для перемещения данных, я думаю, что массовая замена двойных кавычек на `` могла вызвать проблему. У кого-нибудь есть какие-нибудь советы или идеи? Я могу рассказать подробнее, если понадобится.

На самом деле я нашел решение вскоре после создания этого сообщения, но если кому-то еще нужна помощь, вот решение. Мои шаги выше в основном сработали для миграции sqlite на mysql. Однако, как я и предполагал, массовая замена всех двойных кавычек "" на `` вызвала проблему. А именно, несколько строк, вставленных в плагины и текст следующим образом:

INSERT INTO custom_plugins_customtext VALUES(10,replace(replace('\r....

))

В этих строках должны оставаться двойные кавычки, поэтому вместо шага 6 в моем списке выше, вы должны найти & заменить двойные кавычки в любой из следующих строк: CREATE UNIQUE INDEX, CREATE INDEX, & CREATE TABLE IF NOT EXISTS. Это утомительно, но я использовал find & replace для редактирования этих строк и игнорирования остальных, что решило проблему, страницы теперь работают нормально.

Вернуться на верх