django连接Mysql数据库(各种版本问题)

目录

    • 配置快速启动django
    • django连接mysql
    • django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.2
    • AttributeError: 'str' object has no attribute 'decode'
    • raise MigrationSchemaMissing("Unable to create the django_migrations table (%s)" % exc)

配置快速启动django

我们每次启动django都要输入命令python manage.py runserver这样是非常不方便的,于是我们就可以利用PyCharm来配置一下快速启动
打开PyCharm点开Edit Configurations
django连接Mysql数据库(各种版本问题)_第1张图片
然后配置好你的启动项目
django连接Mysql数据库(各种版本问题)_第2张图片
然后每次要启动项目点击运行就可以了
在这里插入图片描述

django连接mysql

内容全部基于Python3.7和Django2.2

python3连接Mysql模块:pip install pymysql

我们由django的settings的配置文件知道默认数据库是sqlite3,所以我们只需要更改配置就好了
在__init__.py添加配置

import pymysql
pymysql.install_as_MySQLdb()

更改settings中的配置

DATABASES = {
     
    'default': {
     
        # 'ENGINE': 'django.db.backends.sqlite3',
        # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'python',
        'HOST': 'localhost',
        'PORT': '3306',
        'USER': 'root',
        'PASSWORD': '123'
    }
}

然后我们发现启动项目就会报错了,因为python3和django2的版本问题
首先我们会遇见这个问题,告诉你版本问题

django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.2

django连接Mysql数据库(各种版本问题)_第3张图片
查阅官网文档后得知,这主要是django2.2内部的一个版本限制在作怪,所以我们需要进入python的文件夹,我这里是:E:\install\python3.7\Lib\site-packages\django\db\backends\mysql\base.py我们把base.py里面的两行代码注释就ok了
在这里插入图片描述
model.py

from django.db import models

# Create your models here.

class Person(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=200, blank=True, null=True)
    pwd = models.CharField(max_length=200, blank=True, null=True)

    def __str__(self):
        return self.name

我们把应用挂载到settings里

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'person'
]

我们准备创建一个app:python manage.py start person
然后它又报错,报我的编码问题

AttributeError: ‘str’ object has no attribute ‘decode’

django连接Mysql数据库(各种版本问题)_第4张图片
我又查阅文档得知,python3和Python2在套接字返回值解码上的区别
python2是用decode,python3是用encode,而下载的默认文件里面是decode,所以我们需要自己手动改
E:\install\python3.7\Lib\site-packages\django\db\backends\mysql\operations.py
进入operations.py文件中,把decode修改为encode,问题就解决了
django连接Mysql数据库(各种版本问题)_第5张图片
然后应用生成了,我准备生成表
python manage.py makemigrations 创建迁移文件
django连接Mysql数据库(各种版本问题)_第6张图片
python manage.py migrate 建表
迁移文件成功生成没问题,然后我建表的时候又出现问题了…

raise MigrationSchemaMissing(“Unable to create the django_migrations table (%s)” % exc)

django.db.migrations.exceptions.MigrationSchemaMissing: Unable to create the django_migrations table ((1064, “You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version
for the right syntax to use near ‘(6) NOT NULL)’ at line 1”))
在这里插入图片描述
它又报我的mysql版本问题,查阅文档后又得知,Django2.1以上不再支持MySQL5.5,必须5.6版本以上,而我还是5.5的…

解决方案:
二选一

(1)Django降级到2.0

pip install Django==2.0.0 -i https://pypi.douban.com/simple
(2)MySQL升级

我图方便选择了回退版本,然后问题得到解决
django连接Mysql数据库(各种版本问题)_第7张图片
end…

你可能感兴趣的:(Python)