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.shaoqun.com/a/668732.html
blackbird:https://www.ikjzd.com/w/950
灰色清关:https://www.ikjzd.com/w/1409
mysql的in语句后面的值类似python的元祖,正常情况下直接传元祖进入也可以。比如我们有一个元祖:tmp_tup=("xiaoming","xiaohua")格式化字符串sql=f"select*fromtbwherenamein{tmp_tup}"这样是没有问题的。但是如果元祖只有一个元素时,python默认生成的元祖是这样的tm
商标抢注:https://www.ikjzd.com/w/1053
兰亭集势:https://www.ikjzd.com/w/820
铭宣海淘:https://www.ikjzd.com/w/1551
口述:老公背着我偷偷见网友我担心他背叛我:http://lady.shaoqun.com/a/273743.html
女子与公公地下情10年前后打胎4次 淫贱儿媳口述与公公乱伦事:http://lady.shaoqun.com/m/a/273565.html
口述:31岁妻子爱上21岁男生(3/3):http://lady.shaoqun.com/m/a/39744.html
No comments:
Post a Comment