Django ORM数据库迁移配置详解:从Code First到MySQL驱动适配
本文详解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',
},
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









