我有这样的疑问:
some_id = 1
cursor.execute('
SELECT "Indicator"."indicator"
FROM "Indicator"
WHERE "Indicator"."some_id" = %s;', some_id)
出现以下错误:
TypeError: 'int' object does not support indexing
some_id是一个整型值,但我希望选择some_id = 1的指标(或者我决定在变量中放入的任何#)。
8条答案
按热度按时间whitzsjs1#
这就把
some_id
参数变成了一个列表,它是可索引的。假设你的方法像我想的那样工作,这应该会起作用。发生错误是因为在那个方法的某个地方,它可能试图迭代那个输入,或者直接索引到它。可能是这样的:
some_id[0]
通过使它成为一个列表(或可迭代的),您允许它像这样索引到第一个元素。
您也可以通过执行以下操作将其转换为元组:
(some_id,)
,其具有不可变的优点。wfveoks02#
您应该将查询参数作为元组(严格地说是可迭代的)传递给
execute()
,(some_id,)
而不是some_id
:dddzy1tm3#
你的id需要是某种可迭代的,这样mogrify才能理解输入,下面是来自frequently asked questions documentation的相关引用:
这应该行得通:
wr98u20j4#
使用Django时出现类似错误:
这不管用
这是可行的:
基本上,错误读取
Some type xyz doesn't have an __ iter __ or __next__ or next function, so it's not next(), or itsnot[indexable], or iter(itsnot)
,在这种情况下,cursor.execute
的参数需要实现迭代,最常见的是List
、Tuple
,或者不太常见的Array
,或者一些定制的迭代器实现。在这种特定情况下,当经典字符串插值填充
%s
、%d
、%b
字符串格式化程序时,会发生错误。相关:
xytpbqjk5#
将参数传递到可索引的列表中。
zphenhs46#
我有同样的问题,它的工作时,我使用正常的格式。
yxyvkwin7#
将
some_id
类型转换为string也可以。tyg4sfes8#
指定可能有效的vars=参数: