插件窝 干货文章 Python Django 数据库迁移失败:为什么 `python3 manage.py makemigrations` 在 Windows 上无法创建 MySQL 数据表?

Python Django 数据库迁移失败:为什么 `python3 manage.py makemigrations` 在 Windows 上无法创建 MySQL 数据表?

数据库 MySQL python 解决方案 401    来源:    2025-04-01

Django 数据库迁移失败问题分析 (Windows + MySQL)

常见原因及解决方案

1. MySQL 客户端库未正确安装

问题: Django 需要 MySQL 客户端库才能与 MySQL 服务器通信。

解决方案:

pip install mysqlclient

pip install pymysql

如果使用 pymysql,还需在 settings.py 中添加:

import pymysql
pymysql.install_as_MySQLdb()

2. 数据库配置错误

检查项: - 确保 settings.py 中的数据库配置正确:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'your_database_name',
        'USER': 'your_username',
        'PASSWORD': 'your_password',
        'HOST': 'localhost',  # 或 MySQL 服务器 IP
        'PORT': '3306',
    }
}

3. 数据库权限问题

解决方案: - 确保数据库用户有创建表的权限 - 在 MySQL 中执行:

GRANT ALL PRIVILEGES ON your_database_name.* TO 'your_username'@'localhost';
FLUSH PRIVILEGES;

4. 数据库不存在

解决方案: - 先手动创建数据库:

CREATE DATABASE your_database_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

5. 端口或连接问题

检查项: - 确保 MySQL 服务正在运行 - 检查防火墙是否阻止了 3306 端口 - 尝试使用 MySQL 客户端工具连接测试

6. 时区问题

解决方案: 在 settings.py 中添加:

USE_TZ = False

7. 编码问题

解决方案: 在数据库配置中添加选项:

'OPTIONS': {
    'charset': 'utf8mb4',
    'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
}

调试步骤

  1. 检查错误消息 - 通常会有更具体的错误提示
  2. 尝试直接连接数据库: bash mysql -u your_username -p your_database_name
  3. 增加 Django 日志级别查看详细错误: python LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'console': { 'level': 'DEBUG', 'class': 'logging.StreamHandler', }, }, 'loggers': { 'django.db.backends': { 'level': 'DEBUG', 'handlers': ['console'], } } }

完整解决方案流程

  1. 确认 MySQL 服务正在运行
  2. 创建数据库 (如果不存在)
  3. 安装正确的 Python MySQL 客户端库
  4. 验证数据库配置
  5. 确保用户有足够权限
  6. 尝试迁移: bash python manage.py makemigrations python manage.py migrate

如果问题仍然存在,请提供具体的错误消息以便进一步诊断。