在下面的示例中,场景1在这两种情况下都运行良好(代码1和代码2)。但是场景2在代码1中不起作用。你知道吗
我的要求是元组应该不断地重复它自己,直到它动态地填充查询中的所有格式化字符串。因为where子句不是所有查询的常量。你知道吗
场景1#
query = SELECT * FROM test.order where total_price in {}
元组:
finTup=((125, 125, 125, 125),)
SELECT * FROM test.order where total_price in (125, 125, 125, 125)
场景2#
query = SELECT * FROM test.order WHERE order_id IN {} AND product_id IN {}
元组:
finTup=((101, 105, 106, 107), (2, 2, 2, 2))
代码1:
frt = 'finTup[{}]'
half = ''
val = ''
i = 0
le = len(finTup)
for i in range(le):
print(i)
print(eval(frt.format(i)))
if i == le -1:
half = half + frt.format(i)
val = val + " " + frt.format(i)
else:
half = half + frt.format(i)+', '
val = val + " " + frt.format(i)+', '
temp2 = query.format(eval(val))
/strong代码:<>
if le == 1:
query = query.format(finTup[0])
elif le == 2:
query = query.format(finTup[0], finTup[1])
elif le == 3:
query = query.format(finTup[0], finTup[1], finTup[2])
elif le == 4:
query = query.format(finTup[0], finTup[1], finTup[2], finTup[3])
Error:
temp2 = query.format(eval(val))
IndexError: tuple index out of range
请帮我把这个修好。你知道吗
TL;博士
您好,出现此错误是因为您试图为
format
函数提供一个参数,该函数需要两个参数(因为您有2{}
)。你知道吗注意:避免使用
eval
函数。。。这是很不推荐的,更不用说在目前的情况下,你。任何事情都可以做,而不必评估str
。你知道吗在下面的内容中,我只运行场景2的代码,即
第一步:调试
假设您更新了调试代码,如下所示:
您的输出应该是:
因此,假设您从上述输出中编写python代码,您要做的是:
实际上,您提供了一个带有两个元素的
tuple
类型的参数。但这里重要的是为format
提供一个参数。format
函数将尝试访问第二个参数,您没有提供该参数。它断了。你知道吗步骤2:修复代码
看看这个SO article。它向您展示了如何使用
*
操作符。它基本上把list
或tuple
转换成一个项目序列。非常适合函数参数等。你知道吗因此,适用于你目前的情况:
把戏完成了。你知道吗
第三步:优化
现在,让我们扔掉代码1并使用代码2所学的内容。我们需要将
tuple
的tuple
解压成参数,以输入format
。那么,为什么不做:它基本上将代码1和代码2的逻辑组合成一行。你知道吗
相关问题 更多 >
编程相关推荐