django查询集query_set API(Ⅰ)

本文介绍了Django中的QuerySet API,包括如何使用all()、切片操作、get()、filter()等方法进行数据查询。还提到了正则表达式查询、排除指定条件、创建、删除、更新和排序操作,以及解决QuerySet重复数据的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(import keyword 

print keyword.kwlist)

打印所有关键字

查询集:

  1. Person.objects.all()

  2. Person.objects.all()[:10] 切片操作,获取10个人,不支持负索引,切片可以节约内存

  3. Person.objects.get(name=name)

  4. Person.objects.filter(name="abc")  # 等于Person.objects.filter(name__exact="abc") 名称严格等于 "abc" 的人

  5. Person.objects.filter(name__iexact="abc")  # 名称为 abc 但是不区分大小写,可以找到 ABC, Abc, aBC,这些都符合条件

  6. Person.objects.filter(name__contains="abc")  # 名称中包含 "abc"的人

  7. Person.objects.filter(name__icontains="abc")  #名称中包含 "abc",且abc不区分大小写

  8. Person.objects.filter(name__regex="^abc")  # 正则表达式查询

  9. Person.objects.filter(name__iregex="^abc")  # 正则表达式不区分大小写

  10. Person.objects.exclude(name__contains="WZ")  # 排除包含 WZ 的Person对象

  11. Person.objects.filter(name__contains="abc").exclude(age=23)  # 找出名称含有abc, 但是排除年龄是23岁的

创建集:

# 方法 1

Author.objects.create(name="WeizhongTu", email="tuweizhong@163.com")

# 方法 2

twz = Author(name="WeizhongTu", email="tuweizhong@163.com")

twz.save()

# 方法 3

twz = Author()

twz.name="WeizhongTu"

twz.email="tuweizhong@163.com"

twz.save()

# 方法 4,首先尝试获取,不存在就创建,可以防止重复

Author.objects.get_or_create(name="WeizhongTu", email="tuweizhong@163.com")

# 返回值(object, True/False)

删除集:

Person.objects.filter(name__contains="abc").delete() # 删除 名称中包含 "abc"的人

如果写成 

people = Person.objects.filter(name__contains="abc")

people.delete()

效果也是一样的,Django实际只执行一条 SQL 语句。

更新集:

批量更新,适用于 .all()  .filter()  .exclude() 等后面 (危险操作,正式场合操作务必谨慎)

Person.objects.filter(name__contains="abc").update(name='xxx'# 名称中包含 "abc"的人 都改成 xxx

Person.objects.all().delete() # 删除所有 Person 记录

单个 object 更新,适合于 .get(), get_or_create(), update_or_create() 等得到的 obj,和新建很类似。

twz = Author.objects.get(name="WeizhongTu")

twz.name="WeizhongTu"

twz.email="tuweizhong@163.com"

twz.save()  # 最后不要忘了保存!!!

排序集:

Author.objects.all().order_by('name')

Author.objects.all().order_by('-name'# 在 column name 前加一个负号,可以实现倒序

重复问题:QuerySet 重复的问题,使用 .distinct() 去重

 

qs1 = Pathway.objects.filter(label__name='x')

qs2 = Pathway.objects.filter(reaction__name='A + B >> C')

qs3 = Pathway.objects.filter(inputer__name='WeizhongTu')

# 合并到一起

qs = qs1 | qs2 | qs3

这个时候就有可能出现重复的

# 去重方法

qs = qs.distinct()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值