百木园-与人分享,
就是让自己快乐。

python拼接mysql语法时in的问题

mysql的in语句后面的值类似python的元祖,正常情况下直接传元祖进入也可以。

比如我们有一个元祖:tmp_tup = (\"xiaoming\", \"xiaohua\")

格式化字符串 sql = f\"select * from tb where name in {tmp_tup}\"      这样是没有问题的。

但是如果元祖只有一个元素时,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}\')\"

这样就可以了,需要注意两个地方。

1. join拼接的时候,一定是用 \',\' 号分隔,不是用一个 , 号

2. 格式化sql的时候,要在tmp_tup_str变量前后加 \' \' ,    因为tmp_tup_str分隔出来长这样:xiaoming\", \"xiaohua        所以前后加上\'\'就是sql标准语法了: \"xiaoming\", \"xiaohua\"

 

上面是我测试无误的方法,欢迎大佬门指正修改,比如会不会出现sql注入的情况,如此做。其他一切正常。

 

来源:https://www.cnblogs.com/wu-zhi-hu/p/14627237.html
图文来源于网络,如有侵权请联系删除。

未经允许不得转载:百木园 » python拼接mysql语法时in的问题

相关推荐

  • 暂无文章