python-django-ORM,常用查询方式
介绍django model 的一些常用查询方式
首先是一些文档性的帮助
__exact 精确等于 like ‘aaa’
__iexact 精确等于 忽略大小写 ilike ‘aaa’
__contains 包含 like ‘%aaa%’
__icontains 包含 忽略大小写 ilike ‘%aaa%’,但是对于sqlite来说,contains的作用效果等同于icontains。
__gt 大于
__gte 大于等于
__lt 小于
__lte 小于等于
__in 存在于一个list范围内
__startswith 以…开头
__istartswith 以…开头 忽略大小写
__endswith 以…结尾
__iendswith 以…结尾,忽略大小写
__range 在…范围内
__year 日期字段的年份
__month 日期字段的月份
__day 日期字段的日
__isnull=True/False
__isnull=True 与 __exact=None的区别
然后是列一些实例:
class Blog(models.Model):
name = models.CharField(max_length=100)
tagline = models.TextField() def __unicode__(self):
return self.name class Author(models.Model):
name = models.CharField(max_length=50)
email = models.EmailField() def __unicode__(self):
return self.name class Entry(models.Model):
blog = models.ForeignKey(Blog)
headline = models.CharField(max_length=255)
body_text = models.TextField()
pub_date = models.DateTimeField()
authors = models.ManyToManyField(Author) def __unicode__(self):
return self.headline
这里一个Entry关联一个blog和多个Authors
对对象的一些操作:
增加:
通过save()方法
from mysite.blog.models import Blog b = Blog(name=’Beatles Blog’, tagline=’All the latest Beatles news.’)
b.save()
修改:
也可通过save方法
b5.name = ‘New name’
b5.save()
关于有外键的,可以直接通过参数列表或者赋值后save.
cheese_blog = Blog.objects.get(name=”Cheddar Talk”)
entry.blog = cheese_blog
entry.save()
关于有多对多关系的,不能直接更新,需要model实例.多对多关系的成员名.add(model)。
joe = Author.objects.create(name=”Joe”)
entry.authors.add(joe)
查找:
检索所有对象:
all_entries = Entry.objects.all()
检索特定的对象
使用以下两个方法:
fileter(**kwargs)
返回一个与参数匹配的QuerySet,相当于等于(=).
exclude(**kwargs)
返回一个与参数不匹配的QuerySet,相当于不等于(!=)。
QuerySet方法
# 这是查找前5个entry表里的数据
Entry.objects.all()[:5]
# 这是查找从第5个到第10个之间的数据。
Entry.objects.all()[5:10]
# 这是查询从第0个开始到第10个,步长为2的数据。
Entry.objects.all()[:10:2]
# 模糊查询
Entry.objects.get(headline__contains=’Lennon’)
接下来是一些ORM提供的比较酷的方法:
Entry.objects.filter(blog__name__exact=’Beatles Blog’)
# 查找entry表中外键关系blog_name=’Beatles Blog’的Entry对象。
Blog.objects.filter(entry__headline__contains=’Lennon’)
# 查找blog表中外键关系entry表中的headline字段中包含Lennon的blog数据。
Blog.objects.filter(entry__author__name=’Lennon’)
# 查找blog表中外键关系entry表中的author字段中包含Lennon的blog数据。
Blog.objects.filter(entry__author__name__isnull=True)
Blog.objects.filter(entry__author__isnull=False,entry__author__name__isnull=True)
# 查询的是author_name为null的值 Blog.objects.filter(entry__headline__contains=’Lennon’,entry__pub_date__year=2008)
Blog.objects.filter(entry__headline__contains=’Lennon’).filter( entry__pub_date__year=2008)
# 这两种查询在某些情况下是相同的,某些情况下是不同的。第一种是限制所有的blog数据的,而第二种情况则是第一个filter是
# 限制blog的,而第二个filter则是限制entry的 Blog.objects.filter(pk__in=[1,4,7])
# id in 1,4,7
Blog.objects.filter(pk__gt=14)
# id = 14
Q对象的复杂查询
Q(question__startswith=’Who’) | Q(question__startswith=’What’) Poll.objects.get(Q(question__startswith=’Who’),
Q(pub_date=date(2005, 5, 2)) | Q(pub_date=date(2005, 5, 6))
)
删除:
Entry.objects.filter(pub_date__year=2005).delete()
Entry.objects.all().delete()
反向查询:
先展示一个model
from django.db import models class Publisher(models.Model): name = models.CharField(max_length=30)
address = models.CharField(max_length=50)
city = models.CharField(max_length=60)
state_province = models.CharField(max_length=30)
country = models.CharField(max_length=50)
website = models.URLField() def __unicode__(self):
return self.name class Author(models.Model): first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=40)
email = models.EmailField() def __unicode__(self):
return u'%s %s' % (self.first_name, self.last_name)
class Book(models.Model): title = models.CharField(max_length=100)
authors = models.ManyToManyField(Author)
publisher = models.ForeignKey(Publisher)
publication_date = models.DateField() def __unicode__(self):
return self.title
一个作者一本书和一个出版社,一本书可以被多个作者撰写,但是只属于一个出版社
反向查询方法:
p = Publisher.objects.get(name='Apress Publishing')
p.book_set.filter(name__icontains='django')
# 属性名称book_set是由模型名称的小写 ( 如 book) 加_set组成的。
# 通过出版社,得到与它有外键关联的书籍名称叫django的书
访问多对多:
1 b = Book.objects.get(id=50)
b.authors.all()
python-django-ORM,常用查询方式的更多相关文章
- Django orm 常用查询筛选总结
本文主要列举一下django orm中的常用查询的筛选方法: 大于.大于等于 小于.小于等于 in like is null / is not null 不等于/不包含于 其他模糊查询 model: ...
- Python - Django - ORM 分组查询补充
单表查询: models.py: from django.db import models class Employee(models.Model): name = models.CharField( ...
- Python - Django - ORM F查询和Q查询
models.py: from django.db import models # 出版社 class Publisher(models.Model): id = models.AutoField(p ...
- Python - Django - ORM 聚合查询和分组查询
models.py: from django.db import models # 出版社 class Publisher(models.Model): id = models.AutoField(p ...
- django ORM常用查询条件
假设有一个模型 class Article(models.Model): title=models.CharField(max_length=50) content=models.TextField( ...
- python - django (ORM常用字段)
# """ python manage.py makemigrations # 更新操作 python manage.py migrate # 转换sql语句到数据库 1 ...
- Python - Django - ORM 常用的字段属性
字段参数: null:用于表示某个字段可以为空 unique:如果设置为 unique=True,则该字段在此表中必须是唯一的 db_index:如果 db_index=True,则代表着为此字段设置 ...
- Python - Django - ORM 常用字段
AutoField: int 自增列,必须填入参数 primary_key=True 如果没有写 AutoField,则会自动创建一个列名为 id 的列 from django.db import m ...
- django orm 常用查询筛选
大于.大于等于 __gt 大于 __gte 大于等于 User.objects.filter(age__gt=10) // 查询年龄大于10岁的用户 User.objects.filter(age__ ...
- Django框架之第六篇(模型层)--单表查询和必知必会13条、单表查询之双下划线、Django ORM常用字段和参数、关系字段
单表查询 补充一个知识点:在models.py建表是 create_time = models.DateField() 关键字参数: 1.auto_now:每次操作数据,都会自动刷新当前操作的时间 2 ...
随机推荐
- cobbler网络装机
cobbler网络装机 原理分析 cobbler简介 Cobbler通过将设置和管理一个安装服务器所涉及的任务集中在一起,从而简化了系统配置.相当于Cobbler封装了DHCP.TFTP.XINTED ...
- I.MX6 计算iomux Pin配置
/********************************************************************************* * I.MX6 计算iomux P ...
- 查找单链表的倒数第k个值
刚开始,我想到的是一种笨方法,先遍历单链表,计算出单链表的长度len,然后再从头遍历单链表到第len-k个节点,那么 这个节点既是单链表的倒数第k个节点. 不过这种算法时间复杂度挺高的,还有一种更简单 ...
- 任务02——安装 Intellj IDEA,编写一个简易四则运算小程序,并将代码提交到 GitHub
github地址:https://github.com/ErhuoHome/First.git 安装jdk与intellij idea没有太大问题,以前安装过eclipse 在程序方面,由于对真分数的 ...
- Python的学习之-计算机编码和二进制
bit位,计算机中最小的表示单位 8bit = 1bytes字节,最小的储存单位,1bytes缩写为1b 1KB = 1024B 1MB = 1024KB 1GB = 1024MB 1TB = 102 ...
- 浏览器中的data类型的Url格式,data:image/png,data:image/jpeg!(源自:http://blog.csdn.net/roadmore/article/details/38498719)
所谓"data"类型的Url格式,是在RFC2397中 提出的,目的对于一些“小”的数据,可以在网页中直接嵌入,而不是从外部文件载入.例如对于img这个Tag,哪怕这个图片非常非常 ...
- 《DSP using MATLAB》Problem 4.10
今天擦完了玻璃,尽管有地方不那么明亮干净,冷风中瑟瑟发抖,年也快临近了. 代码是从网上找的, function [p, np, r, nr] = deconv_m(b, nb, a, na) % Mo ...
- 【BZOJ1703】【usaco2007margold】ranking the cows 奶牛的魅力排名
想的时间比较长所以看题解了= = 原题: Fj有N(N<=1000)头牛,每头牛都有独一无二的正整数 魅力值,Fj想让他们按 魅力值排序. Fj已经知道M(1<=M<=10000)对 ...
- WPF 带CheckBox、图标的TreeView(转)
在WPF实际项目开发的时候,经常会用到带CheckBox的TreeView,虽然微软在WPF的TreeView中没有提供该功能,但是微软在WPF中提供强大的ItemTemplate模板功能和自定义样式 ...
- index.do