vm.objects.all()[:10] #获得前10个对象,不支持负索引
vm.objects.get(name='vmname')
vm.objects.filter(name='vmname') #等价于vm.objects.filter(name__exact='vmname');name__iexact不区分大小写
vm.objects.filter(name__contains="vm")
vm.objects.filter(name__regex="^vm") # 正则查询
vm.objects.filter(name__contains="vm").exclude(ip='192.168.0.1')
tb.objects.all().exists() #判断tb中是否为空
tb.objects.all().count() #查询tb中的对象数量
tb.objects.all().order_by('-name') #对tb中的对象按照name倒序查询
tb.objects.all().reverse() #倒序取值,但需要已经在model中进行了排序,否则无意义。

qb=tb.objects.filter(name__contains='b')
  qb.values() #返回值:[{'ip': u'192.168.1.1', 'rating': 0, u'id': 1, 'name': u'aa'}, {'ip': u'192.168.1.110', 'rating': 11, u'id': 3, 'name': u'aa'}]

qb.values_list() #返回值:[(1, u'aa', u'192.168.1.1', 0), (3, u'aa', u'192.168.1.110', 11)]

q1.values_list('name','ip') #返回值:[(u'aa', u'192.168.1.1'), (u'aa', u'192.168.1.110')

#新建对象:
vm.objects.create(name='vmname',ip='192.168.1.1') item=vm(name='vmname',ip='192.168.1.1')
item.save()

item=vm()
item.ip='192.168.1.1'
item.save()
item=vm(name='vmname')
item.ip='192.168.1.1'
item.save() vm.objects.get_or_create(name='vmname',ip='192.168.1.1') #先Get,不存在则Create,可以防止重复,但速度要相对慢些,返回一个元组,第一个为对象,第二个为True或False, 新建时返回的是True, 已经存在时返回False. #修改对象:
item=vm.objects.get(name='vmname')
item.ip='192.168.1.1'
item.save()

Publisher.objects.all().delete() #删除所有

item.delete() #删除记录,直接删除

当key和value都是变量时,无法通过item.key=value方式赋值,可以使用如下方法:

item.__setattr__(key,value) 或者 setattr(obj, key, value)

item.save()

filter字段为变量时:

field_name='IPAddress__icontains'
v='192.168.1.3'
hvsrvs.objects.filter(**{field_name: v}) filterconitionname = request.GET['slctdname'] + '__icontains'
dnames = DomainNames.objects.filter(**{filterconitionname:q})
#get_or_create条件为变量:
condition = 'IP'
sdict = {condition:'1.1.1.2','APP':'weixin'} kwargs = {condition:sdict[condition]}
#kwargs = {'{0}'.format('IP'): sdict[condition]} #实际上就是一个dict
IPs.objects.get_or_create(defaults=sdict,**kwargs) #kwargs必须要放在后面
IPs.objects.update_or_create(defaults=sdict,**kwargs) kwargs = {
'{0}__{1}'.format('name', 'startswith'): 'A',
'{0}__{1}'.format('name', 'endswith'): 'Z'
}
Person.objects.filter(**kwargs) #Get 条件为变量
condition = 'username'
upwords.objects.get(**{condition:'pymgmtuser'})

bulk_create批量创建,不需要显示调用.save():

aList = [
Entry(headline="Django 1.0 Released"),
Entry(headline="Django 1.1 Announced"),
Entry(headline="Breaking: Django is awesome")
]
Entry.objects.bulk_create(aList) d1 = {'APP': 'a13', 'cname': '1.2.3.4'}
IPs.objects.bulk_create([IPs(**d1)]) #使用字典的形式创建

d1['cname'] = hvsrvs.objects.get(serverip='1.1.1.2')  #当bulk_create的字段中存在foreignkey时,例如cname是一个foreignkey
  IPs.objects.bulk_create([IPs(**d1)])


ds = [IPs(**d1),IPs(**d2),IPs(**d3)] #d1,d2,d3均为dict
  IPs.objects.bulk_create(ds) #批量创建

时间过滤:

samples = Sample.objects.filter(sampledate__gt=datetime.date(2011, 1, 1),sampledate__lt=datetime.date(2011, 1, 31))

Sample.objects.filter(date__year='',
date__month='') Sample.objects.filter(date__range=["2011-01-01", "2011-01-31"])

today = datetime.datetime.now()
  p1 = datetime.timedelta(days=1)
  users_today = lockoutusers.objects.filter(lockouttime__range=[today.date(),(today+p1).date()]) #过滤当天

过滤 OS_mark等于wd或wa的结果:

obj_list_filters = []
obj_list_filters += model.objects.filter(OS_mark='wa')
obj_list_filters += model.objects.filter(OS_mark='wd')

等价于如下:

from django.db.models import Q
upwords.objects.filter(Q(IP__OS_mark='wd') | Q(IP__OS_mark='wa')) #|表示or

Django中的Q对象查询:

from django.db.models import Q

upwords.objects.filter(Q(OS_mark='wd') | Q(OS_mark='wa'))  # |表示or,过滤OS_mark=wd或=wa的条目

upwords.objects.filter(Q(OS_mark='wd') & Q(OS_mark='wa'))  # &表示and,过滤OS_mark=wd并且=wa的条目,等价于如下
upwords.objects.filter(Q(OS_mark='wd'),Q(OS_mark='wa')) # &表示and,过滤OS_mark=wd并且=wa的条目 upwords.objects.filter(Q(IP__OS_mark__icontains='Windows Domain')) #过滤条件 #Q 对象可以使用~ 操作符取反,这允许组合正常的查询和取反(NOT) 查询
Poll.objects.get(
Q(question__startswith='Who'),
Q(pub_date=date(2005, 5, 2)) | Q(pub_date=date(2005, 5, 6))
) #等价于SELECT * from polls WHERE question LIKE 'Who%' AND (pub_date = '2005-05-02' OR pub_date = '2005-05-06') #查询函数可以混合使用Q 对象和关键字参数。所有提供给查询函数的参数(关键字参数或Q 对象)都将"AND”在一起。但是,如果出现Q 对象,它必须位于所有关键字参数的前面
Poll.objects.get(
Q(pub_date=date(2005, 5, 2)) | Q(pub_date=date(2005, 5, 6)),
question__startswith='Who')
#如下不合法:
Poll.objects.get(
question__startswith='Who',
Q(pub_date=date(2005, 5, 2)) | Q(pub_date=date(2005, 5, 6)))

QuerySet结果集合并:

如果用户隶属于某个组,则取出其所有的机器列表

u_groups = [x['name'] for x in request.user.groups.values()]
obj_list_filters = model.objects.none() #设置一个空的QuerySet
if 'upwords-win' in u_groups:
obj_list_filters = obj_list_filters | model.objects.filter(Q(IP__OS_mark='wa')) | model.objects.filter(Q(IP__OS_mark='waa'))
if 'upwords-linux' in u_groups:
obj_list_filters = obj_list_filters | model.objects.filter(Q(IP__OS_mark='Linux'))
if 'upwords-network' in u_groups:
obj_list_filters = obj_list_filters | model.objects.filter(Q(IP__OS_mark='Network')) print obj_list_filters #中间obj_list_filters变量为空也不受影响,如果用户属于多个组,则返回结果为多个obj_list_filters结果相加

QuerySet取并集(必须是同一个model):

r1 = model.objects.filter(Q(IP__OS_mark='wa'))
r2 = model.objects.filter(Q(IP__OS_mark='wd'))
r = r1 | r2
print r #返回r1 + r2结果集合,要求r1或r2均不能为空值

QuerySet取并集(可以是不同的model):

from itertools import chain
from yihaomen.common.models import Article, UserID articles1 = Article.objects.order_by("autoid").filter(autoid__lt = 16).values('autoid','title')
users = UserID.objects.all() items = chain(articles1, users)
for item in items:
print item

get_or_create(defaults=None,**kwargs)   参考:http://www.lihuai.net/program/python/1526.html

obj, created = Person.objects.get_or_create(first_name='John', last_name='Lennon',
defaults={'birthday': date(1940, 10, 9)})

它根据所给的筛选条件查询对象,如果对象不存在就创建一个新对象。

它返回的是一个 (object, created) 元组,其中的 object 是所读取或是创建的对象,而 created 则是一个布尔值,它表示前面提到的 object 是否是新创建的。

update字段:

IPs.objects.get(IP='1.1.12.3') #get结果集不能使用update进行更新,无此方法
IPs.objects.filter(IP='1.1.12.3').update(APP='test333') #filter结果集可以通过update进行更新,无需再save()

update_or_create:

srvs = serverinfors.objects.all()
if request.method == 'POST':
sdict={}
for k,v in request.POST.items():
if k <> 'csrfmiddlewaretoken' and len(v) > 0:
sdict[k] = v.encode('u8') #直接pop(key)不成功
print sdict
serverinfors.objects.update_or_create(IP=sdict['IP'],defaults=sdict) #如果sdict['IP']在数据库中不存在,则新建,存在则更新(defaults内容不检查)

bulk_create(objs, batch_size=None)

Entry.objects.bulk_create([
Entry(headline="Django 1.0 Released"),
Entry(headline="Django 1.1 Announced"),
Entry(headline="Breaking: Django is awesome")

参考:http://www.lihuai.net/program/python/1526.html

reverse()

使用 reverse() 方法会对查询结果进行反向排序。调用两次 reverse() 方法相当于排序没发生改过。

要得到查询结果中最后五个对象,可以这样写:

my_queryset.reverse()[:5]

要注意这种方式与 Python 语法中的从尾部切片是完全不一样的。在上面的例子中,是先得到最后一个元素,然后是倒数第二个,依次处理。但是如果我们有一个 Python 队列,使用 seq[-5:]时,却是先得到倒数第五个元素。Django 之所以采用 reverse 来获取倒数的记录,而不支持切片的方法,原因就是后者在 SQL 中难以做好。

还有一点要注意,就是 reverse() 方法应该只作用于已定义了排序项 QuerySet (例如,在查询时使用了order_by()方法,或是在 model 类当中直接定义了排序项). 如果并没有明确定义排序项,那么调用 QuerySet, calling reverse() 就没什么实际意义(因为在调用 reverse() 之前,数据没有定义排序,所以在这之后也不会进行排序。)

models.py:

from django.db import models

# Create your models here.
class tb(models.Model):
name=models.CharField(max_length=100)
ip=models.GenericIPAddressField()
rating = models.IntegerField() def __str__(self):
return self.name class Meta:
ordering = ['Name'] #排序

dates(field, kind, order=’ASC’)

返回一个 DateQuerySet ,就是提取 QuerySet 查询中所包含的日期,将其组成一个新的 datetime.date 对象的列表。

field 是你的 model 中的 DateField 字段名称。

kind 是 “year”, “month” 或 “day” 之一。 每个 datetime.date对象都会根据所给的 type 进行截减。

“year” 返回所有时间值中非重复的年分列表。
“month” 返回所有时间值中非重复的年/月列表。
“day” 返回所有时间值中非重复的年/月/日列表。
order, 默认是 ‘ASC’,只有两个取值 ‘ASC’ 或 ‘DESC’。它决定结果如何排序。

例子:

>>> Entry.objects.dates('pub_date', 'year')
[datetime.date(2005, 1, 1)]
>>> Entry.objects.dates('pub_date', 'month')
[datetime.date(2005, 2, 1), datetime.date(2005, 3, 1)]
>>> Entry.objects.dates('pub_date', 'day')
[datetime.date(2005, 2, 20), datetime.date(2005, 3, 20)]
>>> Entry.objects.dates('pub_date', 'day', order='DESC')
[datetime.date(2005, 3, 20), datetime.date(2005, 2, 20)]
>>> Entry.objects.filter(headline__contains='Lennon').dates('pub_date', 'day')
[datetime.date(2005, 3, 20)]

datetimes(field, kind, order=’ASC’)

返回一个 DateTimeQuerySet ,就是提取 QuerySet 查询中所包含的日期,将其组成一个新的 datetime.datetime 对象的列表。

none()

返回一个 EmptyQuerySet — 它是一个运行时只返回空列表的 QuerySet。它经常用在这种场合:你要返回一个空列表,但是调用者却需要接收一个 QuerySet 对象。(这时,就可以用它代替空列表)

filter条件过滤:

条件选取querySet的时候,filter表示=,exclude表示!=。
querySet.distinct() 去重复
__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

model.object对象查询过滤、增删改、Q的更多相关文章

  1. python之类与对象属性的增删改查

    类属性与对象属性的增删改查 类属性的增删改查 class School: """ 文档 """ Teacher = "老王&quo ...

  2. java学习3创建学生属性:学号、姓名、电话 完全实现对象集合的增删改查。(控制台来做)

    首先创建一个student类其中包括get,set与构造函数 /** * */package work2; /** * @author Administrator * */public final c ...

  3. WebForm 内置对象、数据增删改、状态保持

    一.内置对象 1.Response对象:响应请求 Response.Write("<script>alert('添加成功!')</script>"); → ...

  4. ORM 多表操作查询及增删改查

    ------------------------------------------只有对前途乐观的人,才能不怕黑暗,才能有力量去创造光明.乐观不是目的,而是人生旅途中的一种态度. 多表操作 创建模型 ...

  5. JavaScript(JS)之Javascript对象DOM之增删改查(四)

    创建节点:var ele_a = document.createElement('a');添加节点:ele_parent.appendChild(ele_img);删除节点:ele_parent.re ...

  6. tp框架数据查询,增删改

    select()是数据模型的一个指定方法,可以获得数据表的数据信息 返回一个二维数组信息,当前数据表的全部数据信息 $obj = D();  创建对象 $obj -> select();  查询 ...

  7. Android学习笔记_9_SQLiteOpenHelper对象之数据库增删改查以及事务回滚操作

    一.SQLite数据库: 在Android平台上,集成了一个嵌入式关系型数据库—SQLite,SQLite3支持 NULL.INTEGER.REAL(浮点数字).TEXT(字符串文本)和BLOB(二进 ...

  8. Nhibernate系列学习之(三) Criteria查询表达式增删改查

    Criteria查询表达式: 正如我们所见,Expression对查询语句的表达式进行了封装和限制,下表列出了Expression所有的方法,以及每个方法所对应的查询表达式及其限制. Restrict ...

  9. sql的一般查询语句(增删改查中的查)

    /*例子 判断规则 http://xxx.xxx/new.php?id=57 and 1=1 正确 http://xxx.xxx/new.php?id=57 and 1=2 错误 http://xxx ...

随机推荐

  1. MySQL Optimization 优化原理

    MySQL Optimization 优化原理 MySQL逻辑架构 如果能在头脑中构建一幅MySQL各组件之间如何协同工作的架构图,有助于深入理解MySQL服务器.下图展示了MySQL的逻辑架构图. ...

  2. PHP PSR 标准

    引用他人文章:http://www.cnblogs.com/52php/p/5852572.html PHP中PSR-[0-4]代码规范 PHP-FIG 在说啥是PSR-[0-4]规范的之前,我觉得我 ...

  3. 【云+社区极客说】新一代大数据技术:构建PB级云端数仓实践

    本文来自腾讯云技术沙龙,本次沙龙主题为构建PB级云端数仓实践 在现代社会中,随着4G和光纤网络的普及.智能终端更清晰的摄像头和更灵敏的传感器.物联网设备入网等等而产生的数据,导致了PB级储存的需求加大 ...

  4. Ripple(瑞波币)validator-keys-tool 配置验证器

    目录 Ripple(瑞波币)validator-keys-tool配置验证器 验证器密钥工具指南 验证器密钥 验证器令牌(Validator Keys) public_key撤销 签名 Ripple( ...

  5. MySQL常用命令操作

    1. 命令行登录使用默认3306端口的MySQL: mysql -u root -p 2. 通过TCP连接管理不同端口的多个MySQL(注意:MySQL4.1以上版本才有此项功能): mysql -u ...

  6. Android 蓝牙操作详解

    1.启用蓝牙并使设备处于可发现状态    1.1 在使用BluetoothAdapter类的实例进操作之前,应启用isEnable()方法检查设备是否启用了蓝牙适配器.       // 使用意图提示 ...

  7. webAPP 图片上传

    关于webAPP 手机上传 用的vue.js 首先是js代码 调用手机app 的 相册或者自己拍照 upload: function(index) { //上传 this.index = index ...

  8. Servlet的数据库访问

    创建数据库:   import java.sql.*; public class SqlUtil { static { try { Class.forName("com.mysql.jdbc ...

  9. 【转】分布式环境下5种session处理策略(大型网站技术架构:核心原理与案例分析 里面的方案)

    前言 在搭建完集群环境后,不得不考虑的一个问题就是用户访问产生的session如何处理.如果不做任何处理的话,用户将出现频繁登录的现象,比如集群中存在A.B两台服务器,用户在第一次访问网站时,Ngin ...

  10. 【转】HttpServletRequestWrapper 实现xss注入

    这里说下最近项目中我们的解决方案,主要用到commons-lang3-3.1.jar这个包的org.apache.commons.lang3.StringEscapeUtils.escapeHtml4 ...