Django ORM数据库迁移配置详解:从Code First到MySQL驱动适配

月亮慢半拍
月亮慢半拍
发布时间:2026-10-13| 6人浏览过
原创

本文详解Django ORM的Code First模式及MySQL数据库配置。涵盖settings中数据库连接参数设置、解决MySQLdb驱动兼容性问题(使用PyMySQL)、处理mysqlclient版本报错,以及配置INSTALLED_APPS和SQL日志打印等关键步骤,帮助开发者顺利完成数据库迁移。

简介

ORM:

关系对象映射(Object-Relational Mapping)。其核心机制是定义Python类,由框架自动生成对应的数据库表结构。

在构建数据库时,通常涉及三种基础数据类型:数值型、字符串类型以及时间类型。

ORM开发模式主要分为两类:

  • DB First:先在数据库中创建表结构,随后根据表结构反向生成对应的数据类,最后通过类来操作数据库。
  • Code First:先编写代码定义数据模型,执行代码后由框架自动创建数据库表结构。

目前主流的ORM框架均采用Code First模式,Django的ORM也不例外。因此,学习Django ORM的本质可以归纳为两个核心部分:

  • 根据定义的类自动创建数据库表。
  • 根据类对数据库表中的数据进行增删改查等各种操作。

首先手动创建MySQL数据库,例如命名为db_Django03。

create database root charset=utf8;

1. 若要将模型转换为MySQL数据库中的表,必须在settings配置文件中添加相关配置:

DATABASES = {
  'default': {
    'ENGINE': 'django.db.backends.mysql',
    'NAME':'bms',        # 要连接的数据库,连接前需要创建好
    'USER':'root',       # 连接数据库的用户名
    'PASSWORD':'',       # 连接数据库的密码
    'HOST':'127.0.0.1',    # 连接主机,默认本级
    'PORT':3306        # 端口 默认3306
  }
}

2. 激活MySQL服务后启动项目,可能会遇到报错:no module named MySQLdb。这是因为Django默认导入的驱动是MySQLdb,但该驱动在Python 3中存在较大兼容性问题。因此,我们需要使用PyMySQL作为替代驱动。只需在项目名文件夹下的__init__.py文件中写入以下代码即可:

import pymysql
pymysql.install_as_MySQLdb()

*注意1:需确保配置文件中的INSTALLED_APPS列表中已写入我们创建的app名称。

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

*注意2:如果启动时遇到如下报错:

django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.3 or newer is required; you have 0.7.11.None

由于MySQLclient目前仅支持到Python 3.4,若使用更高版本的Python,需要修改源码中的版本检查逻辑:

通过查找路径C:\Programs\Python\Python36-32\Lib\site-packages\Django-2.0-py3.6.egg\django\db\backends\mysql下的相关文件,

if version < (1, 3, 3):
   raise ImproperlyConfigured("mysqlclient 1.3.3 or newer is required; you have %s" % Database.__version__)

注释掉版本检查代码即可解决该问题。

*注意3:如果希望打印ORM转换过程中生成的SQL语句,需要在settings中进行如下日志配置:

LOGGING = {
  'version': 1,
  'disable_existing_loggers': False,
  'handlers': {
    'console':{
      'level':'DEBUG',
      'class':'logging.StreamHandler',
    },
  },
  'loggers': {
    'django.db.backends': {
      'handlers': ['console'],
      'propagate': True,
      'level':'DEBUG',
    },
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。