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)

相关推荐
Scott9999HH5 小时前
【IIoT流量实战】蒸汽管道阀门全关却仍有流量?用 Python 实现涡街信号 FFT 频谱分析与温压全补偿积算网关,深度拆解靠谱的涡街流量计厂家硬核技术标准
开发语言·python
码智社6 小时前
AES加密原理详解及Java实现加解密实战
java·开发语言
AI云海6 小时前
python 列表、元组、集合和字典
开发语言·python
二十雨辰7 小时前
[爬虫]-Urllib
爬虫·python
萧瑟余晖7 小时前
JDK 26 新特性详解
java·开发语言
马优晨8 小时前
Freemarker 完整讲解(后端 Java 模板引擎)
java·开发语言·freemarker·freemarker 完整讲解·freemarker模板引擎
玉鸯9 小时前
Agent Hook:在概率推理之上,为 Agent 叠加确定性控制
python·langchain·agent
weixin_446260859 小时前
HACO:面向动态部署环境的对冲式智能计算可靠多智能体调度框架
后端·python·flask
我的xiaodoujiao9 小时前
API 接口自动化测试详细图文教程学习系列32--Allure测试报告2
python·学习·测试工具·pytest