Django连接MariaDB问题:未开启Strict Mode,无法执行数据库迁移
Django数据库迁移问题排查与解决
问题现象
运行python manage.py migrate时出现警告,且迁移未正常执行,命令输出如下:
(env) C:\Users\Mercadotecnia\PycharmProjects\practica>python manage.py migrate
系统检查发现一些问题:警告:
?: (mysql.W002) 数据库连接'default'未设置MariaDB Strict Mode
提示:MariaDB的Strict Mode可通过将警告升级为错误的方式,修复MariaDB中的许多数据完整性问题,例如插入时的数据截断问题。强烈建议启用该模式。
要执行的操作:
应用所有迁移:admin, auth, contenttypes, sessions
正在运行迁移:
无迁移可应用。
关联的models.py代码:
from django.db import models class Libro(models.Model): id = models.AutoField(primary_key=True) titulo = models.CharField(max_length=100, verbose_name="Titulo") imagen = models.ImageField(upload_to='imagenes/', verbose_name="Imagen", null=True), descripcion = models.TextField(verbose_name="Descripcion", null=True) class Meta: db_table = 'Libro'
解决步骤
1. 启用MariaDB Strict Mode
打开Django项目的settings.py,找到DATABASES配置块,为default连接添加OPTIONS参数开启严格模式:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': '你的数据库名称', 'USER': '数据库账号', 'PASSWORD': '数据库密码', 'HOST': 'localhost', 'PORT': '3306', 'OPTIONS': { 'sql_mode': 'STRICT_TRANS_TABLES', }, } }
配置完成后重新运行迁移命令,该警告会消失。
2. 修复模型代码并生成迁移文件
提示“无迁移可应用”是因为未为Libro模型生成迁移文件,且模型代码存在语法问题:
- 先修复
models.py中imagen字段的多余逗号:
# 修改前 imagen = models.ImageField(upload_to='imagenes/', verbose_name="Imagen", null=True), # 修改后 imagen = models.ImageField(upload_to='imagenes/', verbose_name="Imagen", null=True)
- 执行命令生成迁移文件:
python manage.py makemigrations
- 最后应用迁移:
python manage.py migrate
内容的提问来源于stack exchange,提问作者Sistemas Kn-t
相关产品推荐
相关产品推荐

