返回顶部
首页 > 资讯 > 后端开发 > Python >Django Models 查询操作
  • 340
分享到

Django Models 查询操作

操作DjangoModels 2023-01-30 23:01:22 340人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

1.准备数据表: from Django.db import models class City(models.Model): name=models.CharField(max_length=32) nid=models.AutoF

1.准备数据表:

from Django.db import models

class City(models.Model):
name=models.CharField(max_length=32)
nid=models.AutoField(primary_key=True)

class Author(models.Model):
name=models.CharField(max_length=32)
nid=models.AutoField(primary_key=True)
city=models.ForeignKey(to=City,on_delete=models.CASCADE)

class Book(models.Model):
nid=models.AutoField(primary_key=True)
title=models.CharField(max_length=32)
author=models.ManyToManyField(to=Author) #中间表,不用写on_delete

class info(models.Model):
telephone=models.IntegerField()
nid=models.AutoField(primary_key=True)
author=models.OneToOneField(to=Author,on_delete=models.CASCADE) #数据库中增加了字段author_id

2.插入数据:

models.City(name='losange').save()
models.City(name='shanghai').save()

models.Book.objects.create(title='liao story')
models.Book.objects.create(title='spring')
models.Book.objects.create(title='old man and sea') 
models.Book.objects.create(title='the sun rises')
models.Book.objects.create(title='cats')
models.Book.objects.create(title='lions')

city=models.City.objects.first()
models.Author.objects.create(name='haimingwei',city=city)
city=models.City.objects.all()[1]
models.Author.objects.create(name='xuewen',city=city)

 


#1.跨表多对多查询
#模型关系 城市 <-- 作者 <-- 书

#查询haimingwei写的所有书籍
#基于对象-->反向查询(按表名_set) (返回queryset)
models.Author.objects.get(name='haimingwei').book_set.values('title')
#基于queryset-->反向查询(按表名) (返回queryset)
models.Author.objects.filter(name='haimingwei').values('book__title')
#基于queryset-->正向查询(按字段) (返回queryset)
models.Book.objects.filter(author__name='haimingwei').values('title')

#查询spring这本书的作者
#基于对象-->正向查询(按字段) (返回queryset)
models.Book.objects.get(title='spring').author.values('name')
#基于queryset-->反向查询(按表名) (返回queryset)
models.Author.objects.filter(book__title='spring').values('name')
#基于queryset-->正向查询(按字段) (返回queryset)
models.Book.objects.filter(title='spring').values('author__name')

#2.跨表一对多查询 #模型关系 城市 <-- 作者 <-- 书
#查询shanghai所有的作者
#基于对象 --> 反向查询(按表名_set) (返回queryset)
models.City.objects.get(name='shanghai').author_set.values('name')
#基于queryset --> 反向查询(按表名)
models.City.objects.filter(name='shanghai').values('author__name')
#基于queryset --> 正向查询(按字段)(返回queryset)
models.Author.objects.filter(city__name='shanghai').values('name')

#查询海明威所在的城市
#基于对象 --> 正向查询 (按字段) (返回object)
models.Author.objects.get(name='haimingwei').city.name
#基于queryset --> 反向查询(按表名)
models.City.objects.filter(author__name='haimingwei').values('name')
##基于queryset --> 正向查询(按字段)
models.Author.objects.filter(name='haimingwei').values('city__name')

#3.跨表一对一查询
#模型关系 作者 <-- 作者信息

#查询手机号为123的作者
#基于对象 --> 正向查询 (按字段) (返回object)
models.info.objects.get(telephone=123).author.name
#基于queryset --> 正向查询(按字段)
models.info.objects.filter(telephone=123).values('author__name')
#基于queryset --> 反向查询(按表名)
models.Author.objects.filter(info__telephone=123).values('name')

#查询haimingwei的手机号
#基于对象 --> 反向查询 (按表名) (返回object!!!)
models.Author.objects.get(name='haimingwei').info.telephone
#基于queryset --> 正向查询(按字段)
models.info.objects.filter(author__name='haimingwei').values('telephone')
#基于queryset --> 反向查询(按表名)
models.Author.objects.filter(name='haimingwei').values('info__telephone')


#查询写old man and sea这本书作者所在的城市 -->跨三张表查询!
#models.City.objects.filter(author__book__title='old man and sea').values('name')
#models.Book.objects.filter(title='old man and sea').values('author__city__name')
#models.Author.objects.filter(book__title='old man and sea').values('city__name')


from djanGo.db.models import Max,Avg,F,Q,Min,Count,Sum

#聚合查询 --> 返回一个字典
models.info.objects.aggregate(total=Sum('telephone'))


#分组查询 -->不管是单表还是跨表一律都是基于queryset的查询
#模型关系 城市 <-- 作者 <-- 书

#查询每个作者写的书籍总数 -->作者作为基表
models.Author.objects.values('name').annotate(each_total=Count('book__title')).values('name','each_total')
#查询每个作者写的书籍总数 -->书作为基表
models.Book.objects.values('author__name').annotate(each_total=Count('title')).values('each_total')

#查询每本书的作者个数
models.Book.objects.values('title').annotate(total=Count('author__nid'))
models.Author.objects.values('book__title').annotate(total=Count('nid'))

#查询不止一个作者的书籍
models.Book.objects.values('nid').annotate(c=Count('author__nid')).filter(c__gt=1).values('title','c')


#F查询
#比较不同字段值
models.info.objects.filter(telephone__gt=F('nid'))
models.info.objects.filter(telephone__gt=F('nid')*2)
#修改字段值
models.info.objects.update(telephone=F('telephone')*2).values('telephone')


#Q查询
#查询xuewen或海明威所写的书
models.Book.objects.filter(Q(author__name='haimingwei')|Q(author__name='xuewen')).values('title')

 

  • 查询返回多个对象时,返回值为queryset;
  • 基于对象反向查询时,表名_set!
  • 确定返回一个对象时,返回值为object!

--结束END--

本文标题: Django Models 查询操作

本文链接: https://lsjlt.com/news/180899.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Django Models 查询操作
    1.准备数据表: from django.db import models class City(models.Model): name=models.CharField(max_length=32) nid=models.AutoF...
    99+
    2023-01-30
    操作 Django Models
  • django模型查询操作的实现
    目录1、创建对象2、保存ForeignKey和ManyToManyField字段3、检索对象跨越多值的关系查询使用F表达式引用模型的字段:4、缓存和查询集5、使用Q对象进行复杂查询6...
    99+
    2024-04-02
  • Django项目中表的查询的操作
    目录shell操作:使用的环境:Django项目 ORM常用的十三种查询方法2022-09-29 shell操作:   我在使用中是pycharm与数据库建立连接的一个工具。 使用的...
    99+
    2024-04-02
  • django模型的查询操作怎么实现
    本篇内容主要讲解“django模型的查询操作怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“django模型的查询操作怎么实现”吧!目录创建对象保存ForeignKey和ManyToMan...
    99+
    2023-06-20
  • Django ORM 事务和查询优化的操作方法
    目录一、事务操作二、 ORM 惰性查询三、only与defer四、select_related与prefetch_related一、事务操作 模块 from django....
    99+
    2024-04-02
  • MySQL的查询操作
    1. 基础的查询操作 #简单查询 select * from emp; //查询emp中所有的记录 select empno, job,ename from emp; //查询em...
    99+
    2024-04-02
  • Django视图之ORM数据库查询操作API的实例
    查询表记录 查询相关API 操作:models.表名.objects.方法() <BR>all(): 查询所有结果 filter(**kwargs): 它包含了与所给筛选条件...
    99+
    2022-06-05
    视图 数据库查询 实例
  • influxdb查询写入操作
    influxdb的几种操作方法,有喜欢用http API的方式来写入数据,或者通过influxdb的终端来操作(我喜欢的类型),每种方式都适合的场景。介绍通过API接口和终端方式来操作:http://192...
    99+
    2024-04-02
  • LINQ查询操作分析
    这篇文章主要介绍“LINQ查询操作分析”,在日常操作中,相信很多人在LINQ查询操作分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”LINQ查询操作分析”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!LI...
    99+
    2023-06-17
  • 怎么在oracle中查询操作子查询
    怎么在oracle中查询操作子查询?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、子查询语法SELECT select_l...
    99+
    2024-04-02
  • MySQL查询学习之基础查询操作
    前言 MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:...
    99+
    2024-04-02
  • statement/mybatis操作mysql普通查询;游标查询;流式查询
    概述 我当前的jdbc驱动版本如下 mysql-connector-java-8.0.30.jar 在实际业务中一般用普通查询就可以覆盖90%的场景了。但是在一些环境需要去处理大量数据,而这些数据可能...
    99+
    2023-09-27
    mybatis mysql java
  • django数据查询之F查询和Q查询
    仅仅靠单一的关键字参数查询已经很难满足查询要求。此时Django为我们提供了F和Q查询: 1 # F 使用查询条件的值,专门取对象中某列值的操作 2 3 # from django.db.models import F ...
    99+
    2023-01-30
    数据查询 django
  • Django的filter查询
    Django的filter查询 name__contains表示精确大小写的模糊查询 使用name__icontains表示忽略大小写 year_count = DownloadFile.objects.filter(date__cont...
    99+
    2023-01-30
    Django filter
  • MongoDB笔记四——查询操作
    1、指定返回键...
    99+
    2024-04-02
  • Go操作ES-4(query查询)
    在Go中操作Elasticsearch进行查询,需要使用Elasticsearch的官方Go客户端库。以下是一个简单的示例,演示如何...
    99+
    2023-09-21
    Go
  • Python + pymysql 之 MySQL 查询操作
    在MySQL中构建一个测试表,如下: 查询单条数据 # -*- coding: UTF-8 -*-import pymysqldef mysql_query(): """ MySQL查询 :return: """ ...
    99+
    2023-10-09
    python mysql pymysql
  • 【MySQL】查询操作(基础篇)
    目录 1、查询操作(Retrieve) 1.1 全列查询 1.2 指定列查询 1.3 查询字段为表达式 1.4 别名 1.5 去重:DISTINCT 1.6 排序:ORDER BY 1.7 条件查询:WHERE  1.8 分页查...
    99+
    2023-09-01
    mysql 数据库
  • Java操作mongodb的模糊查询和精确查询
    本意是想查查mongo数据库的int类型的like怎么查,但是好像没 解决这个问题。 精确查询;模糊查询;分页查询,每页多少:按某个字段排序(或升或降):查询数量:大于,小于,等于;且,或,某个字段不为空,...
    99+
    2024-04-02
  • MySQL聚合查询与联合查询操作实例
    目录一. 聚合查询1.聚合函数(count,sum,avg...)2.GROUP BY子句3.HAVING二. 联合查询((重点)多表)1.内连接2.外连接3.自连接4.子查...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作