Django中迁移数据使用mysql数据库

Django迁移数据可以根据“代码优先”的原则自动生成数据库中的表,即在代码中直接创建模型类(model),Django会根据我们创建的模型类调用数据迁移命令生成数据库和表。

我在具体操作时遇到一些问题,将解决的过程分享出来,如下:

首先在settings.py中配置:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'discipline',
        'USER': 'root',
        'PASSWORD': 'mysql',
        'HOST': 'localhost',
        'PORT': '3306',
        # 取消外键约束
        'OPTIONS': {
            "init_command": "SET foreign_key_checks = 0;",
        }
    }
}

如果想查看在ORM转换过程中产生的SQL语句,则需在setting.py中配置

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
        },
    },
    'loggers': {
        'django.db.backends': {
            'handlers': ['console'],
            'propagate': True,
            'level': 'DEBUG',
        },
    }
}

执行数据库迁移命令python manage.py makemigrations时,出现错误“did you install mysqlclient?”,我的电脑安装了conda,执行conda install -c bioconda mysqlclient

继续出现错误AttributeError: module 'MySQLdb.constants.FIELD_TYPE' has no attribute 'JSON'

卸载了mysqlclient,升级了conda,重新安装了mysqlclient,旧的版本是1.3可能不行,新的版本是2.0。迁移时仍出现问题,在mysql数据库中手工增加disclipline数据库(即上文中'NAME': 'discipline'规定的数据库),再次执行迁移,没有出错,但提示No changes detected

继续执行python manage.py migrate,出现错误:1064 “you have an error in your SQL syntax...”,经查找,发现是mysql版本低导致,有两个解决办法,升级mysql到最近版本,另一个解决方案是在setting.py中增加:

# 解决数据迁移时1064错误
from django.db.backends.mysql.base import DatabaseWrapper
DatabaseWrapper.data_types['DateTimeField'] = 'datetime'   #fix for MYSQL 5.5

然后再次执行,顺利通过。在数据库中生成了auth_group等表。

你可能感兴趣的:(django,mysql,数据库)