1.什么是ORM
对象关系映射(Object Relational Mapping,简称 ORM )用于实现面向对象编程语言里不同类型系统的数据之间的转换。
ORM 在业务逻辑层和数据库层之间充当了桥梁的作用。ORM 是通过使用描述对象和数据库之间的映射的元数据,将程序中的对象自动持久化到数据库中。
Django 模型使用自带的 ORM。
1.1 使用ORM 的优点:
- 提高开发效率。
- 不同数据库可以平滑切换。
1.2使用ORM 的缺点:
- ORM 代码转换为 SQL 语句时,需要花费一定的时间,执行效率会有所降低。
- 长期写 ORM 代码,会降低编写 SQL 语句的能力。
1.3 ORM 解析过程:
- ORM 会将 Python 代码转成为 SQL 语句。
- SQL 语句通过 pymysql 传送到数据库服务端。
- 在数据库中执行 SQL 语句并将结果返回。
ORM 对应关系表:
2.Django ORM使用方法
2.1 创建数据库:在mysql命令行执行以下命令,创建一个名为"TH"的数据库。
create database TH;
2.2 修改Django配置文件:在项目的 settings.py 文件中找到 DATABASES和INSTALLED_APPS配置项,将其信息修改为:
#文件名django_study.setting.py
DATABASES = {
"default": {
"ENGINE": "django.db.backends.mysql",
"NAME": "TH", #数据库名称
"USER": "root",
"PASSWORD": "111111",
"HOST": "127.0.0.1",
"PORT": "3306"
}
}
INSTALLED_APPS = [
"django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
"app1",
]
2.3 告诉 Django 使用 pymysql 模块连接 mysql 数据库:在与 settings.py 同级目录下的__init__.py中引入模块和进行配置。
#文件名django_study.__init__.py
import pymysql
pymysql.install_as_MySQLdb()
2.4 定义模型:在app(本例应用名称为app1)的model.py下定义类,类名代表了数据库表名,且继承了models.Model。
# 文件名:app1.models.py
from django.db import models
class Test(models.Model):
name = models.CharField(max_length=20, primary_key=True)
age = models.IntegerField(default=0)
2.5 将 Django 项目中 models.py 文件的改动应用到数据库中
python manage.py migrate(作用于全局)
python manage.py migrate app1(作用于应用)
命令执行成功,app1的migrations文件夹中生成0001_initial.py文件,mysql数据库中添加了10张表。
如果出现django.db.utils.NotSupportedError: MySQL 8 or later is required 报错,找到E:\Anaconda\Lib\site-packages\django\db\backends\base\base.py(其中E:\Anaconda替换为你的解释器路径),将以下版本检查的函数注释即可。
def init_connection_state(self):
"""Initialize the database connection settings."""
global RAN_DB_VERSION_CHECK
if self.alias not in RAN_DB_VERSION_CHECK:
# self.check_database_version_supported()
RAN_DB_VERSION_CHECK.add(self.alias)
2.6 通知Django模型有一些变更,模型有变更时,先makemigrations,后migrate。
python manage.py makemigrations
3.测试
自改应用app1的视图函数如下,运行Django项目,然后在浏览器地址栏输入测试接口对应的URL。
文件名:app1.views.py
from django.shortcuts import render
from django.http import HttpResponse
from app1.models import Test
# Create your views here.
def function1(request):
t = Test(name="func1", age=8)
t.save()
return HttpResponse("function1")
def function2(request):
t = Test(name="func2", age=4)
t.save()
return HttpResponse("function2")
app1.Test表中生成两条记录:
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。