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])

相关推荐
lsx2024062 小时前
jEasyUI 条件设置行背景颜色
开发语言
飞雪20072 小时前
局域网服务发现技术, DNS-SD和mDNS具体有什么区别, 什么不同?
开发语言·局域网·mdns·airplay·dns-sd·airprint
人工智能AI技术2 小时前
【Agent从入门到实践】18 脚本化编程:批量执行、自动化逻辑
人工智能·python
开开心心就好2 小时前
打印机驱动搜索下载工具,自动识别手动搜
java·linux·开发语言·网络·stm32·物联网·电脑
摘星编程2 小时前
React Native + OpenHarmony:MapView自定义标注样式
python
向量引擎2 小时前
[硬核架构] 2026 企业级 AI 网关落地指南:从“连接超时”到“秒级响应”的架构演进(附 Python/Java 源码)
人工智能·python·gpt·ai作画·架构·aigc·api调用
0思必得02 小时前
[Web自动化] Selenium模拟用户的常见操作
前端·python·selenium·自动化
凡客丶2 小时前
Windows版Miniconda打包环境迁移到内网离线环境【详解】
windows·python
张np2 小时前
java基础-ListIterator 接口
java·开发语言