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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM