执行或字符串%s传递的查询参数之间的差异

时间:2018-03-21 13:06:14

标签: python string exception arguments psql

我被建议使用以下代码:

query = 'Select "logtext" from log where jobid = %s;'
cursorErrorData.execute(query, str(row[0]))

而不是使用它:

query = 'Select "logtext" from log where jobid = %s;' % str(row[0])
cursorErrorData.execute(query)

我使用了第一个例子,它工作正常,但在这个例子中它崩溃了。

str(row [0])检索的数据如下:

3090

这是例外:

  
    

并非在字符串格式化期间转换所有参数

  

有人可以向我解释两种方法之间的区别以及为什么在这种特殊情况下,我无法使用它吗?

2 个答案:

答案 0 :(得分:1)

您需要在cursor.execute的第二个参数中传递元组

<强>实施例

query = 'Select "logtext" from log where jobid = %s;'
cursorErrorData.execute(query, (str(row[0],))    #-->tuple (str(row[0],)

答案 1 :(得分:1)

execute的第二个参数应该是一系列参数。如果提供str(row[0]),则将其解释为序列,而不是单个参数。 (字符串是一系列字符。)

将其包裹在一个元组中。

cursorErrorData.execute(query, (str(row[0]),))