1.什么是ORM

对象关系映射(Object Relational Mapping,简称 ORM )用于实现面向对象编程语言里不同类型系统的数据之间的转换。
ORM 在业务逻辑层和数据库层之间充当了桥梁的作用。ORM 是通过使用描述对象和数据库之间的映射的元数据,将程序中的对象自动持久化到数据库中。
Django 模型使用自带的 ORM。

1.1 使用ORM 的优点:

  • 提高开发效率。
  • 不同数据库可以平滑切换。

1.2使用ORM 的缺点:

  • ORM 代码转换为 SQL 语句时,需要花费一定的时间,执行效率会有所降低。
  • 长期写 ORM 代码,会降低编写 SQL 语句的能力。

1.3 ORM 解析过程:

  1. ORM 会将 Python 代码转成为 SQL 语句。
  2. SQL 语句通过 pymysql 传送到数据库服务端。
  3. 在数据库中执行 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表中生成两条记录:


追忆
6 声望1 粉丝