2014-09-25 70 views
1

我想建立的可變參數個數的詢問:(!這是默認情況下不顯示)從Python的傳遞可變數量參數的個數到mysql

group_ids = ', '.join(str(Rules[s].value) for s in groups) 
cursor.execute("SELECT a, b, c 
    FROM my_table 
    WHERE a IN (%(group_ids)s) 
    ;", 
    {'group_ids': group_ids}) 

但是,這會導致一個警告: 截斷不正確DOUBLE值:'30,12' 只使用第一個值,其餘省略。 所以我用這個小黑客現在:

group_ids = ', '.join(str(Rules[s].value) for s in groups) 
cursor.execute('\n'.join("SELECT a, b, c", 
    "FROM my_table", 
    "WHERE a IN %s" % group_ids 
    ;") 

我知道這些都是有效的值(從一個enum來),但我會擺脫即使SQL注入的可能性最遠。

回答

1

構建動態的SQL參數部分:

group_ids = [str(Rules[s].value) for s in groups] 
sql = "SELECT a, b, c FROM my_table WHERE a IN (%s)" % (
    ','.join(['%s'] * len(group_ids)) 
) 
cursor.execute(sql, group_ids) 

注:以上不會爲空ID列表工作。用條件來保護它:

if not group_ids: 
    # skip execution of the query. 
+0

對不起,不起作用:mysql.connector.errors.ProgrammingError:處理格式參數失敗; Py thon'list'無法轉換爲MySQL類型 – MKesper 2014-09-26 09:06:23

+0

@MKesper,它應該工作。看到這個:https://asciinema.org/a/12498 – falsetru 2014-09-26 09:29:30

+0

@MKesper,確保你傳遞了'sql'和'group_ids',一個字符串列表。 – falsetru 2014-09-26 09:33:31

相關問題