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