python拼接mysql語法時in的問題

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注入的狀況,如此作。其餘一切正常。

相關文章
相關標籤/搜索