Django 之 ORM

1. ORM的概念&创建表


1. 什么是ORM
    object relation mapping
    关系映射对象  # 不单在python中有,其他语言中也有,也叫ORM

2. ORM的特点是:
    在操作数据库的时候,不用再写原生SQL语句
    "相对而言,执行效率低了"

3. ORM书写的位置:
    models.py

4. 如何使用???
    类名  >>>  表名
    对象  >>>  记录
    属性  >>>  字段

5. 如何来创建表???
class User(models.Model):
    id = models.IntegerField(primary=True)
    username = models.CharField(max_length=32)  # varchar(32)
    password = models.CharField(max_length=32)  # 目前代码翻译不出来char类型
    # 但是 ORM 支持自定义数据类型

6. 类写完之后一定要执行数据库迁移命令,才能真正的创建出来数据表
python3 manage.py makemigrations
python3 manage.py migrate
# 凡是和数据相关的都要执行以上两句话


2. ORM 对字段进行增删改查

# 增加一个字段
age = models.IntegerField()

"""
如果你的表有主键,并且主键名也叫id,那么可以省略不写,自动创建。
如果你的主键名不叫id,那么就需要指定了。
"""

3. ORM数据的增删改查


views.py
from app01 import models

def index(request):
    # 增加数据
    # ORM的第一种方式
    res = models.User.objects.create(username="joshua", password="123")
    "返回值是当前插入的数据对象"

    # 第二种方式
    obj = models.User(username="joshua", password="123")
    obj.save()  # 这才是真正的操作数据行
	
    # 修改
    # sql: update db set ... where
    # ORM
    res = models.User.object.filter(id=1).update(username='jk')
    res = models.User.objects.filter(pk=1).update(username='jk')
    "返回值是影响的行数"
	
    # 第二种修改方式
    res = models.User.objects.filter(pk=1).all()

    return HttpResponse("ok")


4. 练习

5. ORM创建表关系


# mysql是关系型数据库

一对一:
# 外键字段建立在任何一方都可以,但是,推荐建在使用频率较高的一张表

一对多:
# 外键字段一定要建在多的一方

多对多:
# 外键字段不建在任何一张表,而是建在第三张关系表中

"例:"
    图书表
    出版社表
    作者表
    作者详情表
"""
图书和出版社是一对多,图书多,出版社一
图书和作者是多对多的关系,
作者表和作者详情表是一对一
"""

# 不常用的数据称之为冷数据
# 常用的数据称之为热数据



"ORM创建表关系"

1. 先创建这张表的基础字段
2. 再回头创建外键字段

class Book(models.Model):
    title = models.CharField(max_length=32)
    price = models.DecimalField(max_digits=8, decimal_places=2)
	
    # 外键字段
    # publish_id = models.ForeignKey(to="Publish", to_field="id")
    publish_id = models.ForeignKey(to="Publish")
    # 如果关联的是id字段,可以省略不写

    # 建立多对多关系
    authors = models.ManyToManyField(to="Author")
    """
    authors是一个虚拟字段,不会真正在Book表中创建出来这个字段,
    这个字段是关联第三张表的
    """


class Publish(models.Model):
    addr = models.CharField(max_length=32)


class Author(models.Model):
    name = models.CharField(max_length=64)
    # 建立一对一
    author_detail = models.OneToOneField(to="AuthorDetail")


class AuthorDetail(models.Model):
    phone = models.CharField(max_length=128)



posted @ 2022-02-25 15:07  Joshua_jiaxue  阅读(56)  评论(0编辑  收藏  举报