使用django构建id列表时遇到一个问题。如果我选择超过1个ID就可以,但如果我只选择一个,它会在列表中产生额外的','。
testa = tuple([k['id'] for k in queryset.values('id')])
print testa
如果在查询集中只有1个id,则会显示
(1234,)
除了确定
(1234,1244)
如何在列表中删除额外的'
答案 0 :(得分:11)
(1234,)
是1元组的正确Python表示。 (1234)
会出错,因为它被视为数学括号中的一个简单整数,评估为1234
,而不是包含它的元组。
这对于列表是不同的,因为方括号没有这个双重目的也意味着数学操作顺序,所以虽然[1234]
和[1234,]
都是长度的有效表示 - 1列表,默认文本表示可以没有额外的逗号。
如果您正在设计一个不需要与Python相同的元组的文本表示,您可以这样做:
'(%s)' % ', '.join(map(repr, testa))
答案 1 :(得分:2)
要编写包含单个值的元组,您必须包含逗号,即使只有一个值。
您可以索引元组以获得所需的输出:
print testa[0]
>>>> 1234
答案 2 :(得分:1)
print "(%s)" % ",".join(testa)
答案 3 :(得分:1)
那就是python如何使用单个值显示元组,同时请注意,创建具有单个值的元组的推荐语法也是x = (1,)
,这有助于区分元组和函数调用。
如果你真的想要一个像你描述的输出你可以尝试
testa = tuple([k['id'] for k in queryset.values('id')])
if len(testa)==1:
print '(%s)'%testa[0]
else:
print testa
答案 4 :(得分:1)
哟说你想要一个清单,但事实上你要创建一个元组。
要获取ID列表,请查看values_list
>>> Entry.objects.values_list('id', flat=True).order_by('id')
[1, 2, 3, ...]
>>> Entry.objects.filter(id=1).values_list('id', flat=True)
[1]
答案 5 :(得分:0)
在 Python 3 中:
testa_tup = testa # where testa is the tuple you want to turn to string for SQL
testa = ""
for c in testa_tup:
testa += "," + str(c)
testa = testa[1:]
然后格式化您的 SQL:
"SELECT * FROM table WHERE value IN ({testa})"