问题:
在练习Django模型时,运行
python manage.py migrate TestModel
出现
?: (mysql.W002) MariaDB Strict Mode is not set for database connection 'default'
![](https://img.haomeiwen.com/i7468301/7fdf21a8cdd88d50.png)
环境
windows 10
python 3.8
navicat
解决方法
打开settings.py文件,在DATABASES变量定义处下面添加,
DATABASES['OPTIONS']['init_command'] = "SET sql_mode='STRICT_TRANS_TABLES'"
或如下方式
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 数据库引擎
'NAME': 'test', # 数据库名称
'HOST': '127.0.0.1', # 数据库地址,本机 ip 地址 127.0.0.1
'PORT': 3306, # 端口
'USER': 'root', # 数据库用户名
'PASSWORD': '123456', # 数据库密码
'OPTIONS':{
'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
'charset': 'utf8mb4'
}
}
}
![](https://img.haomeiwen.com/i7468301/b6ff294b11a160bc.png)
原因
可按问题的提示,打开如下网址:
https://docs.djangoproject.com/en/3.2/ref/databases/#mysql-sql-mode
大意为:
从MySQL 5.7开始,sql_mode选项的默认值包含STRICT_TRANS_TABLES。
当数据在插入时被截断时,这个选项会将警告升级为错误,因此Django强烈建议为MySQL激活一个严格模式以防止数据丢失(STRICT_TRANS_TABLES或STRICT_ALL_TABLES)。
![](https://img.haomeiwen.com/i7468301/92cb240c5a6df0f2.png)
网友评论