Django, миграция с sqlite на mysql, проблема с декодером json для перенесенных страниц
У меня есть ранний и простой проект django, для начала работы мы использовали базу данных sqlite при настройке. Кто-то другой создал несколько django страниц с различными плагинами, но поскольку это реальные страницы, а не шаблоны, они хранятся в базе данных. Мы поняли, что нам следовало перейти на mysql до создания этих страниц, и теперь у нас есть 2 варианта. 1, мы мигрируем и он создает страницы снова, что отнимает много времени, или 2, мы находим способ перенести содержимое базы данных sqlite в mysql.
Я пытался разобраться со вторым вариантом, переносом нашей sqlite базы данных на mysql. Я изучил Google, но ничего не оказалось таким простым, как мне хотелось бы, но я смог создать файл дампа sql, выполнить некоторые шаги по изменению формата этого файла и перенести этот файл в новую базу данных mysql. Однако, хотя данные там есть, и я могу получить доступ к администратору и новым страницам, все перенесенные страницы сталкиваются с ошибкой, когда я пытаюсь просмотреть страницы или скопировать & вставить их в django admin. И для ясности, я создал почти пустую страницу перед миграцией (пробовал это несколько раз), чтобы посмотреть, не приведет ли это к ошибке, но этого не произошло. Ошибка выглядит так, как показано ниже
Для контекста, это django 3.2, ptyhon 3.10, mysqlclient 2.1.1, и мы используем docker в этом проекте, но это не имеет отношения к данной проблеме. Я предполагаю, что изменения, которые я сделал, чтобы заставить файл дампа sql работать, вызывают это, проблемы в изменениях кавычек. Вот список шагов, которые я выполнил для переноса данных, и настройки, которые я сделал для файла дампа:
- создал файл дампа так: sqlite3 data/db.sqlite3 .dump > dump.sql .
- Редактирование файла: удалить строку: PRAGMA foreign_keys=OFF;
- Редактировать файл: изменить BEGIN TRANSACTION -> BEGIN
- Edit File: change AUTOINCREMENT -> AUTO_INCREMENT
- Edit File: найти все строки с sqlite_sequence и удалить, не используется в mysql .
- Файл редактирования: заменить все двойные кавычки "" на `` знаки
- Файл редактирования: Наконец, в некоторых строках CREATE UNIQUE INDEXE были слишком длинные имена, поэтому мне пришлось их сократить, например: измените имя из следующей строки на blog_markdownpost_categories_id_3007eb9a_uniq .
СОЗДАТЬ УНИКАЛЬНЫЙ ИНДЕКС
blog_markdownpost_categories_markdownpost_id_blogcategory_id_3007eb9a_uniq
ONblog_markdownpost_categories
(markdownpost_id
,blogcategory_id
);
- Наконец, я сбросил этот файл в mysql следующим образом: mysql -u root -p "password_here" db_name < dump.sql .
Эти шаги сработали для перемещения данных, я думаю, что массовая замена двойных кавычек на `` могла вызвать проблему. У кого-нибудь есть какие-нибудь советы или идеи? Я могу рассказать подробнее, если понадобится.
На самом деле я нашел решение вскоре после создания этого сообщения, но если кому-то еще нужна помощь, вот решение. Мои шаги выше в основном сработали для миграции 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 для редактирования этих строк и игнорирования остальных, что решило проблему, страницы теперь работают нормально.