经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » MySQL » 查看文章
python拼接mysql语法时in的问题
来源:cnblogs  作者:吴志虎  时间:2021/4/12 9:47:32  对本文有异议

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注入的情况,如此做。其他一切正常。

 

原文链接:http://www.cnblogs.com/wu-zhi-hu/p/14627237.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号