Перенос sqlite в mysql с помощью Django

Я новичок в Django и веб-серверах и застрял на несколько дней. Я унаследовал приложение Django, python версии 2.7 и Django версии 1.9. Приложение ранее использовало базы данных SQLite по умолчанию. Я хочу перейти на Mysql по причинам производительности.

  • Я загрузил данные в sqlite db с помощью reset_db
  • .
  • Я установил mysqlclient
  • Я создал mysql db
  • Я создал имя пользователя и пароль для пользователя и предоставил все разрешения
  • Я сбросил данные в файл dump.json с помощью python manage.py dumpdata > dump.json
  • .
  • Я изменил файл настроек, чтобы использовать django.db.backends.mysql
  • Я пытался загрузить данные с помощью python manage.py loaddata и с помощью makemigrations, migrate, он не работает со следующей ошибкой (с ЛЮБОЙ командой manage.py):

Я безрезультатно пытался исправить это следующим образом:

  • удаление всех файлов миграции, кроме файла init
  • Поддельная миграция
    • Все еще не работает с той же ошибкой, потому что мне нужно запустить manage.py для этого
  • Даже не загружая sqlite db и просто изменив файл настроек, чтобы он ссылался на mysql и пытался заставить его просто загружаться прямо оттуда
    • Прошел немного дальше, он создает некоторые таблицы в mysql, но не заполняет данные, у меня была куча ошибок на этом пути, как ValueError: The database backend does not accept 0 as a value for AutoField., но когда я ищу эти ошибки, соответствующие сообщения не кажутся применимыми или исправляющими проблему
    • .
  • Удаление всех .pyc файлов в каталоге и повторная попытка выполнения команд

Я вижу, что база данных существует, но Django не создает и не заполняет таблицы. В Dump.json содержатся правильные данные. Раньше это работало для sqlite.

Мой файл models.py выглядит следующим образом

from django.db import models
from django.utils.translation import ugettext as _


class Category(models.Model):

    name = models.CharField(max_length=100)

    translations = {
        'Hiring and Labor' : 'Kukodi au Kibarua',
        'Financial Services' : 'Sekta ya Kifedha',
        'Non-Agri Services' : 'Sekta Isiyo ya Kilimo',
        'Transport' : 'Usafirishaji',
        'Agri Processing' : 'Kuongezea Thamani Bidhaa za Kilimo',
        'Merchant/Retail' : 'Wafanyabiashara wa Rejareja',
        'Trading and Wholesale' : 'Wafanyabiashara wa Jumla',
        'Repairs' : 'Fundi',
                    }

    def __str__(self):
        return self.translations.get(self.name,self.name)

    @staticmethod
    def translated_name():

        return _('Category')


class District(models.Model):

    name = models.CharField(max_length=100)

    def __str__(self):
        return self.name

    @staticmethod
    def translated_name():
        return _('District')


class Village(models.Model):

    name = models.CharField(max_length=100)
    district = models.ForeignKey(District, on_delete=models.CASCADE)

    def __str__(self):
        return self.name

    @staticmethod
    def translated_name():
        return _('Village')


class Subvillage(models.Model):

    name = models.CharField(max_length=100)
    village = models.ForeignKey(Village, on_delete=models.CASCADE)

    class Meta:
        ordering = ['village__name', 'name']

    def __str__(self):
        return "{0.village.name} - {0.name}".format(self)

    @staticmethod
    def translated_name():
        return _('Subvillage')


class Business(models.Model):

    name = models.CharField(max_length=70)

    category = models.ForeignKey(Category, on_delete=models.CASCADE)

    # location information
    district = models.ForeignKey(District, on_delete=models.CASCADE)
    village = models.ForeignKey(Village, on_delete=models.CASCADE)
    subvillage = models.ForeignKey(Subvillage,
        on_delete=models.CASCADE)

    # phone numbers
    number1  = models.CharField(max_length=15)
    number2  = models.CharField(max_length=15)
    number3  = models.CharField(max_length=15)

    # business info
    subsector1 = models.CharField(max_length=50)
    subsector2 = models.CharField(max_length=50)

    crop1      = models.CharField(max_length=50)
    crop2      = models.CharField(max_length=50)
    crop3      = models.CharField(max_length=50)

    livestock1 = models.CharField(max_length=50)
    livestock2 = models.CharField(max_length=50)
    livestock3 = models.CharField(max_length=50)

    def __str__(self):
        return self.name

    def description(self):
        return " ".join((self.subsector1, self.subsector2))

    @staticmethod
    def translated_name():
        return _('Business')

Мой файл reset_db.py выглядит следующим образом

Пожалуйста, дайте мне знать, что еще я могу попробовать, рад предоставить любые другие мои файлы, если это необходимо. Спасибо!

Лучшим способом является использование приспособлений:

python manage.py dumpdata > application.json

затем, после того как вы измените свою базу данных:

python manage.py loaddata application.json

Это должно работать идеально, однако если у вас возникнут проблемы, попробуйте выполнить dumpdata по одному для каждого приложения, например:

python manage.py dumpdata my_app > my_app.json

В некоторых ситуациях может случиться так, что есть некоторые детали, которые вы не можете JSONify некоторую таблицу, тогда вам нужно --exclude затем в команду dumpdata, например:

python manage.py dumpdata my_app --exclude my_app.mymodel > application.json
Вернуться на верх