我试图通过Python中的MySQL查询传递字符串,如此 -
cur.execute("""SELECT * FROM abcDB.zyzTable WHERE ordId IN %s """ %(orderString1))
和orderString1看起来像(534,523,544)字符串有括号
我收到以下错误。
ValueError:不支持的格式字符' T' (0x54)索引2195
我该如何解决这个问题?
答案 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。