2012-11-16 113 views
-1

我使用Python和MYSQL用於讀取數據的多個ID記錄,我知道這是一個基本的問題,但我無法找到它。如何選擇與MYSQL數據庫

我在Python從一些字典產生像示例ID的列表

dic = {'1': u'', '3': u'', '2': u'', '4': u''} 
lis_ids = dic.keys() 

query = "SELECT * FROM File_upload where id IN %s" % [int(i) for i in a] 

print query 

結果

"SELECT * FROM File_upload where id IN [1, 3, 2, 4]" 

上述結果將顯示語法錯誤,因爲實際上它應該是如下

"SELECT * FROM File_upload where id IN (1, 3, 2, 4)" 

我們如何才能將列表轉換爲Python中的元組,因爲我從列表中獲取ID。

編輯代碼

其實這是我得到

的字典我已經是

dic = {'submit': u'', '1': u'', '3': u'', '2': u'', '4': u'', 'groups': {}} 
lis_ids = dic.keys() 

實際上我們會得到submitgroups也到列表中的第二個方案,但我只想整數鍵作爲ID

所以也我想實現這個功能if not len(key) > 1 take the key

所以任何人都可以在一行中實現所有這些功能如下?如果你想只取屬於按鍵;(你會得到一個類型錯誤,而不需要它的str()電話,很可惜。)


query = "SELECT * FROM File_upload where id IN %s" % str(tuple(int(i) for i in a)) 

回答

2

試試這個兌換爲整數,試試這個:

def only_numbers(seq): 
    for i in seq: 
     try: 
      yield int(i) 
     except ValueError: 
      pass 

query = "SELECT * FROM File_upload where id IN %s" % str(tuple(only_numbers(dic.keys()))) 

這並不簡單,因爲你必須嘗試轉換將每個關鍵字都設爲一個整數,並通過不做任何事情來處理錯誤,所以我們需要一個生成器函數來處理它的那部分內容。

+0

哇非常感謝你還我編輯的代碼,請看看它 –

+0

更新我的答案。 – cdhowie

3

試試這個:

dic = {'submit': u'', '1': u'', '3': u'', '2': u'', '4': u'', 'groups': {}} 
list_ids = [elem for elem in dic.keys() if elem.isdigit()] 

query = "SELECT * FROM File_upload where id IN (%s)" % ','.join(list_ids) 

print query 
+1

更新了第二種情況。 –

+0

這適用於某些情況,但如果list_ids中存在元字符,該怎麼辦? –

+0

例如''123;'。isdigit()'返回false,然後不進入列表,這就是你所說的@JayElston? –