Python 查询和#x27之间的差异;s参数由execute或字符串%s传递

Python 查询和#x27之间的差异;s参数由execute或字符串%s传递,python,string,exception,arguments,psql,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) 我使用了第一个示例,它运行良好,但在这个示例中它崩溃了 st

我被建议使用以下代码:

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(第[0]行)检索的数据如下:

3090
这是个例外:

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


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

您需要在
游标的第二个参数中传递一个元组

Ex:

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

您需要在
游标的第二个参数中传递一个元组

Ex:

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

execute
的第二个参数应该是一系列参数。如果您提供
str(行[0])
,那么它将被解释为一个序列,而不是一个参数。(字符串是一个字符序列。)

把它包装成一个元组

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

execute
的第二个参数应该是一系列参数。如果您提供
str(行[0])
,那么它将被解释为一个序列,而不是一个参数。(字符串是一个字符序列。)

把它包装成一个元组

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