mysql的in語句後面的值相似python的元祖,正常狀況下直接傳元祖進入也能夠。python
好比咱們有一個元祖:tmp_tup = ("xiaoming", "xiaohua")mysql
格式化字符串 sql = f"select * from tb where name in {tmp_tup}" 這樣是沒有問題的。sql
可是若是元祖只有一個元素時,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}')"select
這樣就能夠了,須要注意兩個地方。語法
1. join拼接的時候,必定是用 ',' 號分隔,不是用一個 , 號方法
2. 格式化sql的時候,要在tmp_tup_str變量先後加 ' ' , 由於tmp_tup_str分隔出來長這樣:xiaoming", "xiaohua 因此先後加上''就是sql標準語法了: "xiaoming", "xiaohua"sql注入
上面是我測試無誤的方法,歡迎大佬門指正修改,好比會不會出現sql注入的狀況,如此作。其餘一切正常。