给Django配置mysql数据库
现在settings中将DATABASES重新设置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': "databasename",
'PASSWORD': "password",
'USER':"rusername",
'HOST': "localhost",
'PORT': 3306,
'OPTIONS': { "init_command": "SET default_storage_engine='INNODB'"
} #设定mysql数据库的初始引擎,也可以加入其他字段,如 chaeset等
}
}
执行python manage.py makemigrations
时,报错:
'Did you install mysqlclient or MySQL-python?' % e
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: No module named 'MySQLdb'.
Did you install mysqlclient or MySQL-python?
经过上网搜索得知,MySQLdb
并不支持Python3.5,因此只能找别的类库代替。
解决方法:
使用pymysql
代替MySQLdb
,因为两者的用法完全一致,步骤:
PIP install pymysql
- 执行成功后,打开
__init__.py
,添加如下:
import pymysql
pymysql.install_as_MySQLdb()
- 重新执行
python manage.py makemigrations
,成功。
实际上按照给出的提示是要安装mysqlclient
的,但是在pip
下安装会报错,要去下载执行文件,但是实际上pymysql更加好用,算是进化版吧.
接着执行python3 mange.py migrate
,报错如下:
WARNINGS:
?: (mysql.W002) MySQL Strict Mode is not set for database connection 'default'
HINT: MySQL's Strict Mode fixes many data integrity problems in MySQL, such as data truncation upon insertion, by escalating warnings into errors. It is strongly recommended you activate it.
说明当前使用的mysql数据库不是严格模式.严格模式下:
1.不支持对not null字段插入null值
2.不支持对自增长字段插入""值
3.不支持text字段有默认值
需要进行数据库的改动,以防止bug出现.
在settings.py
中,数据库设置下面插入:
DATABASES['default']['OPTIONS']['init_command'] = "SET sql_mode='STRICT_TRANS_TABLES'"
所以目前关于settings.py
中的数据库全部设置如下:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': "databasename",
'PASSWORD': "password",
'USER':"rusername",
'HOST': "localhost",
'PORT': 3306,
'OPTIONS': { "init_command": "SET default_storage_engine='INNODB'"
} #设定mysql数据库的初始引擎,也可以加入其他字段,如 chaeset等
}
}
DATABASES['default']['OPTIONS']['init_command'] = "SET sql_mode='STRICT_TRANS_TABLES'"