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注入的情況,如此做,其他一切正常,
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/273571.html
標籤:其他
