python集合操作 读取_python – Django – 如何使用QuerySet过滤来获取对象的子集?...
根据
documentation:
filter(**kwargs) Returns a new QuerySet containing objects that match
the given lookup parameters.
The lookup parameters (**kwargs) should be in the format described in
Field lookups below. Multiple parameters are joined via AND in the
underlying SQL statement.
对我来说,这表明它将返回原始集合中的项目子集.
但是我似乎错过了一些东西,因为下面的示例并不像我期望的那样:
>>> kids = Kid.objects.all()
>>> tuple(k.name for k in kids)
(u'Bob',)
>>> toys = Toy.objects.all()
>>> tuple( (t.name, t.owner.name) for t in toys)
((u'car', u'Bob'), (u'bear', u'Bob'))
>>> subsel = Kid.objects.filter( owns__in = toys )
>>> tuple( k.name for k in subsel )
(u'Bob', u'Bob')
>>> str(subsel.query)
'SELECT "bug_kid"."id", "bug_kid"."name" FROM "bug_kid" INNER JOIN "bug_toy" ON ("bug_kid"."id" = "bug_toy"."owner_id") WHERE "bug_toy"."id" IN (SELECT U0."id" FROM "bug_toy" U0)'
正如你在上面看到的那样,subsel最终会返回重复的记录,这不是我想要的.我的问题是获得子集的正确方法是什么? (注意:按定义设置不会出现多次出现的同一个对象)
解释为什么它的行为也会很好,因为我过滤意味着你在Python中使用filter()内置函数实现了什么.这是:采取满足要求的元素(换句话说,丢弃不符合要求的元素).而这个定义似乎不允许引入/复制对象.
我知道可以完全区分(),但仍然导致相当丑陋(可能比可能更慢)查询:
>>> str( subsel.distinct().query )
'SELECT DISTINCT "bug_kid"."id", "bug_kid"."name" FROM "bug_kid" INNER JOIN "bug_toy" ON ("bug_kid"."id" = "bug_toy"."owner_id") WHERE "bug_toy"."id" IN (SELECT U0."id" FROM "bug_toy" U0)'
我的models.py完整性:
from django.db import models
class Kid(models.Model):
name = models.CharField(max_length=200)
class Toy(models.Model):
name = models.CharField(max_length=200)
owner = models.ForeignKey(Kid, related_name='owns')
编辑:
在与@limelight聊天之后,结论是我的问题是我希望filter()根据字典定义来表现.并且它是如何在Python或任何其他理智的框架/语言中工作的.
更确切地说,如果我设置A = {x,y,z}并且我调用A.filter(< predicate>),我不希望任何元素被复制.使用Django的QuerySet,但它的行为如下:
A = {x,y,z}
A.filter( )
# now A i.e. = {x,x}
所以首先问题是不合适的方法名称(比如match()会更好).
第二件事是我认为创建比Django允许的更有效的查询是可能的.我可能错了,如果我有一点时间,我可能会尝试检查是否属实.
python集合操作 读取_python – Django – 如何使用QuerySet过滤来获取对象的子集?...相关推荐
- python集合操作 读取_对python读写文件去重、RE、set的使用详解
# -*- coding:utf-8 -*- from datetime import datetime import re def Main(): sourcr_dir = '/data/u_lx_ ...
- python.集合转列表_Python列表、元组、字典、集合
目录 3.1 Python 列表 3.2 Python 元组 3.3 Python 字典 3.4 Python 集合 3.1 Python列表 3.1.1 Python列表的概述 列表的定义:列表是一 ...
- python写邮箱系统_Python django实现简单的邮件系统发送邮件功能
本文实例讲述了Python django实现简单的邮件系统发送邮件功能.分享给大家供大家参考,具体如下: django邮件系统 Django发送邮件官方中文文档 总结如下: 1.首先这份文档看三两遍是 ...
- python字典操作添加_Python字典常见操作实例小结【定义、添加、删除、遍历】
本文实例总结了python字典常见操作.分享给大家供大家参考,具体如下: 简单的字典: 字典就是键值对key-value组合. #字典 键值对组合 alien_0 ={'color':'green', ...
- python文件分块读取_Python多进程分块读取超大文件的方法
本文实例讲述了Python多进程分块读取超大文件的方法.分享给大家供大家参考,具体如下: 读取超大的文本文件,使用多进程分块读取,将每一块单独输出成文件 # -*- coding: GBK -*- i ...
- python集合增加元素_python集合的新增元素方法整理
我们可以把全体人数当作一个集合,想要往其中加入新人有不同的增加方式.可以一周增加一次,也可以集中到月底一起加入集体.我们今天所要讲的在python集合中,添加元素的两种方法就可以这样理解.一个是整体加 ...
- python提取cad坐标到excel_使用python来操作autocad,并且将坐标点转换成cad可见对象...
由于工作需要,在项目中遇到一个棘手的问题,如何将(mssql)数据库中的BLOB文件转成cad可见图形 (可能每个项目需求不一样,解决方式不同) 第一步 . 需要转换的图形类型 第二步 . 那我们先查 ...
- 使用python来操作autocad,并且将坐标点转换成cad可见对象
由于工作需要,在项目中遇到一个棘手的问题,如何将(mssql)数据库中的BLOB文件转成cad可见图形 (可能每个项目需求不一样,解决方式不同) 第一步 . 需要转换的图形类型 第二步 . 那我们先查 ...
- python文件操作函数_python基础之文件操作,集合,函数
文件操作: 打开文件的方法: 第一种:打开文件执行完命令后,需要关闭文件,否则会一直占用内存空间 f=open('/data/1.txt','r+') #后面的r+ 表示打开文件的模式是读写 #命令 ...
最新文章
- SpringCloud SpringBoot 推荐
- python四级中考有用的_一位中考生家长的后悔药:考前30多天,千万别做这7件傻事...
- Oracle Hint(提示)与常用方法
- 机器学习算法(2)——AdaBoost算法
- 工作流activiti5 使用流程变量
- oracle 函数可变参数,6.3 带有可变参数的函数
- [转]Delphi的运算符重载
- matlab高斯窗函数,Matlab的窗函数,矩形窗,三角窗,汉明窗,汉宁窗,布莱克曼窗
- 大数据影响下的专题地图编制
- pc station v15 博图_博图的pcstation是做什么的?和wincc有什么区别?怎么使用?-工业支持中心-西门子中国...
- Datawhale 数据挖掘新手入门笔记 -Task5 模型融合
- tf.estimator.EstimatorSpec讲解
- 怎么打开苹果Mac电脑科学型计算器
- 在家徒手健身就是这9个动作,让你一天帅24小时
- 2017前端技术预览(未完结,最后更新于1月13日)
- 解决九号老C(C30/C40/C60/C80)电动车坐垫感应失灵的问题
- mybatis调用oracle视图
- nes网页服务器怎么改ip,virtuanes联机(怎么用VirtuaNES联网)
- linux下intel安装教程,在 Ubuntu 15.10 上安装 Intel Graphics 安装器
- ​S/4中究竟有多少个模块,你对这些模块了解多少
热门文章
- C++编写DLL的方法
- 关于VMware虚拟机安装windows 7系统
- python 相关系数_python如何计算相关系数与协方差
- OpencvSharp的踩坑之路
- 计算机操作系统实验一,计算机操作系统实验一.doc
- python解复杂方程组_sympy计算方程组的复杂表达式怎么获得数值解?
- php怎么做免登录,php---一周内免登录
- np合并 python_这15个tips,带你领略 Python 的简洁和优雅
- Android开发之Java的IO流读写的十种方法
- c语言车库计费系统,基于单片机智能车库计费系统设计.doc