python-django_ORM的十三个查询API接口

十三个查询API接口

复制代码
    # exclude排除
    # 返回结果为queryset类型数据,通过objects控制器可以调用,queryset类型数据也能调用
    # obj_list = models.Book.objects.exclude(id=2)
    # obj_list = obj_list.filter(title='少年阿宾1')
    # obj_list = obj_list.all()
    # obj_list = models.Book.objects.exclude(id=2).filter(title__contains='少年').exclude(id=5)
​
    # order_by 排序
    # 返回结果为queryset类型数据,queryset类型数据可以调用这个方法
    # obj_list = models.Book.objects.all().order_by('-id')   #-id加个-号表示按照该字段降序排列, desc  asc
    # '''select * from app01_book order by id desc;'''
    # obj_list = models.Book.objects.all().order_by('price', '-id') #按照价格升序排列,价格相同的按照id降序排列
​
    # reverse()
    # 翻转必须在排序数据的基础上
    # 返回结果为queryset类型数据,queryset类型数据可以调用这个方法
    # obj_list = models.Book.objects.all().order_by('-id').reverse()
​
    # count
    # queryset类型数据可以调用这个方法,返回值为数字
    # obj_list = models.Book.objects.all().count()
​
    # first\last
    # queryset类型数据可以调用这个方法,返回值为模型类对象
    # obj_list = models.Book.objects.all().first()
    # obj_list = models.Book.objects.all()[0]
    # obj_list = models.Book.objects.all().last()
​
    # exists
    # 判断查询结果是有数据
    # queryset类型数据可以调用这个方法
    # obj_list = models.Book.objects.all().exists()  #判断是否有数据的效率高,只找一条记录 limit 1
​
​
    # values
    # 可以获取指定字段数据
    # objects可以调用, queryset也能调用,返回结果还是queryset,内容为一个个字典数据
    # obj_list = models.Book.objects.values('title', 'price')
    # obj_list = models.Book.objects.filter(id=5).values('title', 'price')
​
    # values_list
    # 可以获取指定字段数据,返回结果还是queryset,内容为一个个元组数据
    # obj_list = models.Book.objects.values_list('title', 'price')
    # obj_list = models.Book.objects.filter(id=5).values_list('title', 'price')
​
    # distinct 去重
    # 一般配合values和values_list来使用
    obj_list = models.Book.objects.values('price').distinct()
​
    print(obj_list)

表关系设计

from django.db import models

Create your models here.

作者表

class Author(models.Model):

name = models.CharField( max_length=32)

age = models.IntegerField()

django2.x版本必须手动指定on_delete=models.CASCADE级联模式

au = models.OneToOneField(to="AuthorDetail", to_field="id", on_delete=models.CASCADE)

au = models.OneToOneField("AuthorDetail")

au = models.IntegerField()

au = models.OneToOneField("AuthorDetail", db_constraint=False)

db_constraint=False取消foreign key的强制约束效果,还可以继续使用orm的提供的属性或者方法来操作关系记录

foreign key + unique

属性是OneToOneField或者ForeignKey,那么生成的对应字段是 属性名称_id

#作者详细信息表

class AuthorDetail(models.Model):

birthday=models.DateField()

telephone=models.BigIntegerField()

addr=models.CharField(max_length=64)

出版社表

class Publish(models.Model):

name=models.CharField( max_length=32)

city=models.CharField( max_length=32)

#书籍表

class Book(models.Model):

title = models.CharField( max_length=32)

publishDate=models.DateField()

price=models.DecimalField(max_digits=5,decimal_places=2)

publishs=models.ForeignKey(to="Publish",to_field="id",on_delete=models.CASCADE)

publishs=models.ForeignKey("Publish")

authors = models.ManyToManyField('Author')

class authortobook(models.Model):

book_id = models.ForeignKey('Book')

author_id = models.ForeignKey('Author')

记录的增删改查操作

增加

增

一对一关系的添加

先创建作者详细信息表记录

ret = models.AuthorDetail.objects.create(

birthday='2000-12-12',

telephone='122',

addr='惠州',

)

models.Author.objects.create(

name='元涛',

age=18,

# au_id=ret.id, #如果用的是属性名称_id,那么值为关联记录的id值

au=ret, #如果写属性名称来添加关系数据,那么值为关联记录的模型类对象

)

一对多

pub_obj = models.Publish.objects.get(id=1)

models.Book.objects.create(

title='白洁2',

price=10,

publishDate='1980-07-07',

# publishs=pub_obj, #如果写属性名称来添加关系数据,那么值为关联记录的模型类对象

publishs_id=2, #如果用的是属性名称_id,那么值为关联记录的id值

)

多对多

book_obj = models.Book.objects.get(title='金鳞岂是池中物')

author1 = models.Author.objects.get(id=1)

author2 = models.Author.objects.get(id=2)

book_obj.authors.add(author1,author2)

book_obj.authors.add(1, 2)

book_obj.authors.add(*1, 2)

相关推荐
VidDown8 小时前
24fps 转 25fps 不只是改个数字:帧率转换、PAL/NTSC 与音频补偿
python·网络协议·音视频·视频编解码·视频
死磕音视频10 小时前
让小模型做选择题:限定候选项并读取 logits 概率的入门实践(附 Python 代码)
开发语言·python·大模型·文本分类·transformers
凤山老林10 小时前
Spring Boot 接入国密 SM2/SM3/SM4 的一些实践记录
spring boot·后端·python
pride.li12 小时前
第03章 Python 教程-基础语法:注释与变量
服务器·前端·后端·python·算法·计算机视觉
databook12 小时前
用 Pydantic AI 从零搭建一个能干活的 AI Agent
人工智能·python
顽疲12 小时前
Java vue 养老系统源码详解:月账单 care_month_bill 与 Quartz 扣费 Job 实践
java·开发语言·vue.js·vue养老·springboot养老·java养老
康小旺12 小时前
把 markitdown 做成 Windows 桌面版:拖进文档就出 Markdown,附 233MB→64MB 打包裁剪全过程
python
Wang's Blog13 小时前
Java 项目实战: 交友项目 - 安装开发工具与环境准备
java·开发语言·交友
启观川13 小时前
数据结构与算法-第 3 章 常用算法-贪心算法
数据结构·笔记·python·算法·贪心算法
南笙北梦13 小时前
本地开源大模型多轮对话显存泄漏排查与修复实录
python