mysql的in语句后面的值相似python的元祖,正常状况下直接传元祖进入也能够。python
好比咱们有一个元祖:tmp_tup = ("xiaoming", "xiaohua")mysql
格式化字符串 sql = f"select * from tb where name in {tmp_tup}" 这样是没有问题的。sql
可是若是元祖只有一个元素时,python默认生成的元祖是这样的 tmp_tup = ("xiaoming", ) ,最终生成的sql : "select * from tb where name in ("xiaoming", )" 这样就会报语法错误,由于后面多了一个逗号。测试
能够利用join作以下修改。字符串
tmp_tup_str = "','".join(tmp_tup)变量
格式化字符串 sql = f"select * from tb where name in ('{tmp_tup_str}')"select
这样就能够了,须要注意两个地方。语法
1. join拼接的时候,必定是用 ',' 号分隔,不是用一个 , 号方法
2. 格式化sql的时候,要在tmp_tup_str变量先后加 ' ' , 由于tmp_tup_str分隔出来长这样:xiaoming", "xiaohua 因此先后加上''就是sql标准语法了: "xiaoming", "xiaohua"sql注入
上面是我测试无误的方法,欢迎大佬门指正修改,好比会不会出现sql注入的状况,如此作。其余一切正常。