python拼接mysql语法时in的问题

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注入的状况,如此作。其余一切正常。

相关文章
相关标签/搜索