Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 获取字段查询值的元组_Python_Django - Fatal编程技术网

Python 获取字段查询值的元组

Python 获取字段查询值的元组,python,django,Python,Django,我想获取一些对象的ID。什么是将它们放入元组的干净方法 A.values()queryset返回以下内容: MyModel.objects.filter(name__startwith='A').values('id') >>>> [{'id': 20L}, {'id': 21L}, {'id': 84L}] 我想把它们转换成一个元组,比如: (20L, 21L, 84L) 生成器表达式呢 tuple(d['id'] for d in MyModel.objects.

我想获取一些对象的ID。什么是将它们放入元组的干净方法

A.values()queryset返回以下内容:

MyModel.objects.filter(name__startwith='A').values('id')
>>>> [{'id': 20L}, {'id': 21L}, {'id': 84L}]
我想把它们转换成一个元组,比如:

(20L, 21L, 84L)

生成器表达式呢

tuple(d['id'] for d in MyModel.objects.filter(name__startwith='A').values('id'))
或者:

import operator
tuple(map(lambda x: operator.getitem(x, 'id'), MyModel.objects.filter(name__startwith='A').values('id'))
import operator
getter = operator.attrgetter('id')
tpl = tuple(map(getter, MyModel.objects.filter(name__startwith='A')))
或者,根据出于某种原因删除的答案,您可以这样做:

tuple(object.id for object in MyModel.objects.filter(name__startwith='A'))
或者:

import operator
tuple(map(lambda x: operator.getitem(x, 'id'), MyModel.objects.filter(name__startwith='A').values('id'))
import operator
getter = operator.attrgetter('id')
tpl = tuple(map(getter, MyModel.objects.filter(name__startwith='A')))

生成器表达式呢

tuple(d['id'] for d in MyModel.objects.filter(name__startwith='A').values('id'))
或者:

import operator
tuple(map(lambda x: operator.getitem(x, 'id'), MyModel.objects.filter(name__startwith='A').values('id'))
import operator
getter = operator.attrgetter('id')
tpl = tuple(map(getter, MyModel.objects.filter(name__startwith='A')))
或者,根据出于某种原因删除的答案,您可以这样做:

tuple(object.id for object in MyModel.objects.filter(name__startwith='A'))
或者:

import operator
tuple(map(lambda x: operator.getitem(x, 'id'), MyModel.objects.filter(name__startwith='A').values('id'))
import operator
getter = operator.attrgetter('id')
tpl = tuple(map(getter, MyModel.objects.filter(name__startwith='A')))

最简单的解决方案是使用
flat=True

models.MyModel.objects.all().values_list('id', flat=True)
这与values()类似,不同之处在于它在迭代时返回元组,而不是返回字典。每个元组包含传入values_list()调用的各个字段中的值,因此第一项是第一个字段,以此类推

如果只传入单个字段,还可以传入展开参数。如果为True,则意味着返回的结果是单个值,而不是一个元组。举个例子可以让区别更清楚:


最简单的解决方案是使用
flat=True

models.MyModel.objects.all().values_list('id', flat=True)
这与values()类似,不同之处在于它在迭代时返回元组,而不是返回字典。每个元组包含传入values_list()调用的各个字段中的值,因此第一项是第一个字段,以此类推

如果只传入单个字段,还可以传入展开参数。如果为True,则意味着返回的结果是单个值,而不是一个元组。举个例子可以让区别更清楚:


谢谢,它看起来不错,但不适用于MySQL(错误提示:“此版本的MySQL尚不支持‘LIMIT&IN/ALL/ANY/SOME子查询’)。您的问题没有此限制,抱歉,谢谢,它看起来不错,但不适用于MySQL(错误提示:“此版本的MySQL尚不支持‘LIMIT&IN/ALL/ANY/SOME子查询’)您的问题没有此限制,抱歉