1.添加数据:
# 方法1:对象.save()
book = Book(**kwargs)
book.save()

# 方法2:类.create(**kwargs)
Book.create(**kwargs)

2.删除数据:拿到对象list,然后.delete()
Book.objects.filter(title='').delete()

3.修改数据:
# 方法1:拿到集list,然后update(**kwargs)
Book.objects.filter(title='t1').update(title='t2',auth='测试')
# 方法2:使用单对象,修改后.save
b = Book.objects.get('')
b.title = ''#注意这里不能使用b['title'],必须使用b.title
b.save()

4.单表查询:
models.Tb1.objects.filter(id__gte=1) # 获取id大于等于1的值
models.Tb1.objects.filter(id__lte=10) # 获取id小于10的值
models.Tb1.objects.filter(id__lt=10, id__gt=1) # 获取id大于1 且 小于10的值

# in范围比较
models.Tb1.objects.filter(id__in=[11, 22, 33]) # 获取id等于11、22、33的数据
# not in
models.Tb1.objects.exclude(id__in=[11, 22, 33]) # not in
# range
models.Tb1.objects.filter(id__range=[1, 2]) # 范围bettwen and

# isnull
Entry.objects.filter(pub_date__isnull=True)

# 其他类似
startswith,istartswith, endswith, iendswith,
# contains包含
models.Tb1.objects.filter(name__contains="ven")
models.Tb1.objects.filter(name__icontains="ven") # icontains大小写不敏感
models.Tb1.objects.exclude(name__icontains="ven")
# regex正则匹配,iregex 不区分大小写
Entry.objects.get(title__regex=r'^(An?|The) +')
Entry.objects.get(title__iregex=r'^(an?|the) +')

# 升序
orderby('id')
orderby('-id') # 降序列
# 切片
models.Tb1.objects.all()[10:20]

#查询的字段
values_list(**fields) #他的每个元素是tuple,实际用到它的地方只有只取一个字段,同时设置flat=true,如下:

values_list(‘字段’,flat=True)返回一个list,   一般用下面的values(**fields),如下:
values(**fields) #它的每个元素是字典

5.其他查询:
5.1: 多表查询:基于双下划线的跨表查询
5.2: aggregate聚合函数: models.Book.objects.all().aggregate(Avg('price'), Sum('price')) #aggregate(n个统计函数)
5.3: annotate分组查询: gs = list(RebotComputer.objects.values('status').annotate(count = Count('*')).values('status','count').order_by())    以后写分组统计都按这个完整范式来写
第一个values是分组字段(如果不写默认会按id分组),第二个values是需要查询的字段, order_by():默认的排序字段也会自动加入到GROUP BY子句中. 要避免这样的情况,只需在查询时清空默认的order by

一般只需要会RebotComputer.objects.values('status').annotate(sum= Sum('xxx')) 即可,意思按status分组求xxx的和

5.4 F查询,Q查询
5.5.复杂的sql如果不会写,可以使用extra来做: extra__gte = '(total_draw + money + bank_money - total_recharge)>=' + str(total_yl__gte) ;  query = query.extra(where=[extra__gte])

6.关联查询优化: 参见https://www.imooc.com/video/18464

由于django默认是懒加载,所以由子对象取父对象时会由很多条sql,以下是通过急迫抓取优化:

一对1,多对1-->可以使用select_related('映射的外键对应的对象名')来急迫获取父对象;

多对多-->prefetch_related('xxx')获取对象的集合

1对多-->Agent.objects.filter(name='00').agent_qref_set.all(),其中agent_qref_set是字表名称加_set(agent_qref_set是django默认1对多的集合对象写法,不用写代码申明),如果有foreignKey中有别名,可以使用别名

---------------------------------------------------------------------------------

1.子查询:

if not self_id in [ADMIN_ID, BOSS_ID]: 
  listIds = Broker.objects.using('broker').filter(top_parent_id=self_id).values_list('user__id', flat=True) // ①

rows = Apply.objects.using('broker').filter(**kwargs)[offset:offset+limit]// ②

注意 // ① 不会立即执行,在②执行时作为子查询条件

2.1对多级联:

user=User.objects.get(pk=1)
permissions = user.permissions.all() #必须调用all或values(field1,field2,...)来查询查询关联的permissions, python默认是延迟加载

python 查询,子查询以及1对多查询的更多相关文章

  1. python实现简易数据库之二——单表查询和top N实现

    上一篇中,介绍了我们的存储和索引建立过程,这篇将介绍SQL查询.单表查询和TOPN实现. 一.SQL解析 正规的sql解析是用语法分析器,但是我找了好久,只知道可以用YACC.BISON等,sqlit ...

  2. 关系数据库SQL之基本数据查询:子查询、分组查询、模糊查询

    前言 上一篇关系数据库常用SQL语句语法大全主要是关系型数据库大体结构,本文细说一下关系型数据库查询的SQL语法. 语法回顾 SELECT [ALL|DISTINCT] <目标列表达式>[ ...

  3. ThinkPHP 关联模型中查询某条记录的父级(非查询子级)

    数据表 id      cat_name      cat_pid 76     手机.数码     0 84     手机配件        76 86     蓝牙耳机        84 从属关 ...

  4. oracle 基础SQL语句 多表查询 子查询 分页查询 合并查询 分组查询 group by having order by

    select语句学习 . 创建表 create table user(user varchar2(20), id int); . 查看执行某条命令花费的时间 set timing on: . 查看表的 ...

  5. 当子查询内存在ORDER BY 字句时查询会报错

    问题:当子查询内存在ORDER BY 字句时查询会报错 SQL: SELECT * FROM ( SELECT * FROM USER ORDER BY USER_CORD ) S. 解决办法:在子查 ...

  6. python爬取免费优质IP归属地查询接口

    python爬取免费优质IP归属地查询接口 具体不表,我今天要做的工作就是: 需要将数据库中大量ip查询出起归属地 刚开始感觉好简单啊,毕竟只需要从百度找个免费接口然后来个python脚本跑一晚上就o ...

  7. Python-select 关键字 多表查询 子查询

    sql 最核心的查询语句!!!! 增删改 单表查询 select语句的完整写法 关键字的书写顺序 执行顺序 多表查询 笛卡尔积 内连接 左外连接 右外连接 全外连接 通过合并左外连接和右外连接 子查询 ...

  8. 【Python】批量查询-提取站长之家IP批量查询的结果v1.0

    0 前言 写报告的时候为了细致性,要把IP地址对应的地区给整理出来.500多条IP地址找出对应地区复制粘贴到报告里整了一个上午. 为了下次更好的完成这项重复性很高的工作,所以写了这个小的脚本. 1 使 ...

  9. MySQL之多表查询一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习

    MySQL之多表查询 阅读目录 一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习 一 介绍 本节主题 多表连接查询 复合条件连接查询 子查询 首先说一下,我们写项目一般都会建 ...

  10. (5)MySQL的查询:模糊查询(通配符查询like)、限制符查询(limit)、排序查询(order by)、分组查询(group by)、(子查询)

    注意事项 指令语法的优先级: where > group by >order by > limit 例:select count(id) as cnt,age from tablen ...

随机推荐

  1. NSByteCountFormatter

    可以将字节转化为我们需要的Kb或者m + (NSString *)stringFromByteCount:(long long)byteCount countStyle:(NSByteCountFor ...

  2. BZOJ1801 [Ahoi2009]chess 中国象棋 【dp】

    题目 在N行M列的棋盘上,放若干个炮可以是0个,使得没有任何一个炮可以攻击另一个炮. 请问有多少种放置方法,中国像棋中炮的行走方式大家应该很清楚吧. 输入格式 一行包含两个整数N,M,中间用空格分开. ...

  3. 阿里系产品Xposed Hook检测机制原理分析

    阿里系产品Xposed Hook检测机制原理分析 导语: 在逆向分析android App过程中,我们时常用的用的Java层hook框架就是Xposed Hook框架了.一些应用程序厂商为了保护自家a ...

  4. kubernetes 之dns 服务发现

    1.在每个节点上面导入如下镜像 [root@node1 DNS]# lltotal 59816-rw-r--r--. 1 root root 8603136 Nov 25 18:13 execheal ...

  5. pat 团体天梯赛 L2-002. 链表去重

    L2-002. 链表去重 时间限制 300 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 给定一个带整数键值的单链表L,本题要求你编写程序,删除 ...

  6. [LeetCode] Surrounded Regions 广度搜索

    Given a 2D board containing 'X' and 'O', capture all regions surrounded by 'X'. A region is captured ...

  7. C++学习(二):学会使用stringstream

    1.前言 今天在CppTemplateTutorial群里,有人问了一个问题:这一堆add怎么简化掉 https://wandbox.org/permlink/vDPDwMFbBIQSSymS.代码如 ...

  8. Python 数据类型-3

    字典 (dict) Python中唯一的映射的类型(哈希表) 字典对象是可变的,但是字典的键必须使用不可变的对象,一个字典可以使用不同类型的键值 定义字典: In [68]: dic = {} #使用 ...

  9. Scrapy笔记:日志的使用

    scrapy的日志记录有两种方式: spider.logger.xx()和python标准库中的logger = logging.get_Logger('log information') 向日志对象 ...

  10. 在 Fedora 26/27 GNOME 3.24/3.26 环境中安装 FCITX 小企鹅输入法(修订)

    之前我曾经写过一篇文章介绍在 GNOME 3.x 下安装小企鹅输入法框架,但最近在 Fedora 26/27 环境下发现老方法已经失效了,会导致 GNOME 3.24/3.26 桌面在重启后无法进入, ...