2014-07-08 34 views
0

我想從一個表中選擇數據,並使用第一個表中的返回值在另一個表上執行查詢。從Python中檢索和選擇二進制值3

這兩個表區分大小寫,類型爲utf8-bin。

當我執行我的第一選擇,我回到二進制值的元組:

query = """SELECT element FROM table2 WHERE id IN (%s) """ % results 

query = """SELECT id FROM table1""" 
results = (b'1234', b'2345', b'3456') 

然後我想使用的ID表2執行查詢從表1返回

這是正確的方法嗎?

+0

絕對不是,用'%'添加的值不會被轉義,並且不能保證能夠工作(更不用說注入漏洞了)。 – cpburnz

+0

你使用的是什麼mysql庫? – cpburnz

+0

Mysql.connector。我嘗試參數化查詢,但我得到一個錯誤,我無法參數化一個元組。試圖找到一種方法來處理這兩個查詢而不處理其間的數據。謝謝 – ensnare

回答

1

您需要創建查詢,以便它可以正確參數:

query = """SELECT element FROM table2 WHERE id IN (%s) """ % ",".join(['%s'] * len(results)) 

這將改變查詢:

query = """SELECT element FROM table2 WHERE id IN (%s,%s,%s) """ 

然後,你可以通過queryresults到​​(或適當的)方法,以便results正確參數化。

+0

謝謝,這個工程。這樣做是否有任何性能下降? – ensnare

+0

@ensnare如果你有1000個以上的ID,因爲查詢會有'id IN(%s,%s,...重複1000次以上)',那麼你可能會遇到的性能下降可能會很大,但那可能是如果是問題,則通過批處理解決。 – cpburnz