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

相关推荐
财经资讯数据_灵砚智能8 小时前
基于全球经济类多源新闻的NLP情感分析与数据可视化(夜间-次晨)2026年5月19日
大数据·人工智能·python·信息可视化·自然语言处理
执明wa8 小时前
从 T 到协变逆变
java·开发语言·数据结构
lianghyan9 小时前
List.stream().min
java·开发语言
三*一9 小时前
Mapbox GL JS 前端多边形分割实战:从踩坑到优雅实现
开发语言·前端·javascript·vue.js
财经资讯数据_灵砚智能9 小时前
基于全球经济类多源新闻的NLP情感分析与数据可视化(日间)2026年5月20日
大数据·人工智能·python·信息可视化·自然语言处理
计算机安禾9 小时前
【c++面向对象编程】第37篇:面向对象设计原则(一):单一职责与开闭原则
开发语言·c++·开闭原则
小明同学019 小时前
C++后端项目:统一大模型接入 SDK(三)
开发语言·c++
Brilliantwxx9 小时前
【C++】 继承与多态(下)
开发语言·c++
C+++Python9 小时前
C++考试语法知识
开发语言·c++
wuxinyan1239 小时前
工业级大模型学习之路019:LangChain零基础入门教程(第二篇):LLM 模块与模型抽象
人工智能·python·学习·langchain