Python fdb firebirdsql.操作错误:字符串"?"的转换错误



我使用以下位来使用字典

中的键:值创建sql语句。
record_number = 627
temp_dict = {
"FOO": 752,
"BAR": "test",
"I": "zzzzz",
"Hate": "tesname",
"SQL": "testsomethingesle",
"SO": "commentlol",
"MCUH": "asadsa",
"FILLING": "zzzzzz",
"NAME": "''",
}
update_query = (
"UPDATE table_name SET {}".format(
", ".join("{} = '?'".format(k) for k in temp_dict)
)
+ " WHERE RECNUM = '"
+ record_number 
+ "';"
)
update_values = tuple(temp_dict.values())
cur.execute(update_query, update_values)

update_query正确输出

UPDATE table_name SET FOO = '?', BAR = '?', I = '?', Hate = '?', SQL = '?', SO = '?', MCUH = '?', FILLING = '?', NAME = '?' WHERE RECNUM = '627';

和update_values也看起来正确

(752, 'test', 'zzzzz', 'tesname', 'testsomethingesle', 'commentlol', 'asadsa', 'zzzzzz', "''")

,但我得到以下错误firebirdsql.OperationalError: conversion error from string "?"

我的理解是?基本上是一个占位符值,如果我把一个元组或列表作为第二个参数在cur.execute()它应该取代?使用传入的值。我做错了什么?

生成的语句具有带问号的字符串字面值('?'),而不是用作参数占位符的问号(普通?)。这意味着当您执行语句时,您试图将文字值?分配给列,如果该列不是CHAR、VARCHAR或BLOB,则会产生错误,因为没有从字符串?到其他数据类型的有效转换。

您需要使用"{} = ?"代替(注意问号周围没有单引号)。

相关内容

  • 没有找到相关文章

最新更新