ValueError:不支持的格式字符' T' (0x54)

时间:2018-02-06 01:24:00

标签: python mysql valueerror

我试图通过Python中的MySQL查询传递字符串,如此 -

cur.execute("""SELECT * FROM abcDB.zyzTable WHERE ordId IN %s """ %(orderString1))

和orderString1看起来像(534,523,544)字符串有括号

我收到以下错误。

  

ValueError:不支持的格式字符' T' (0x54)索引2195

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

我建议使用不同的方法来参数化IN查询。不要使用您要检查的所有值创建类似"(534,523,544)"的字符串,而是将每个值作为参数传递。

例如:

order_ids = [534, 523, 544]
query = "SELECT * FROM abcDB.zyzTable WHERE ordId IN ("
query += ",".join(["%s"]*len(order_ids)) + ")"
cur.execute(query, order_ids)

哪个会有效地执行此查询:

"SELECT * FROM abcDB.zyzTable WHERE ordId IN (534,523,544)"

这里的关键是我使用",".join(["%s"]*len(order_ids))为我的查询动态创建适当数量的占位符。

同样注意cur.execute()的第二个参数是订单ID列表。我没有像你那样格式化字符串。

不要使用%,否则您很容易受到sql注入攻击。这种方式更安全,更可靠。更多关于这篇文章的阅读:

Python best practice and securest to connect to MySQL and execute queries