2011-06-27 78 views
2

我有一個Python中的ID列表。例如:在Python中使用SQL-IN

x = [1,2,3,4,5,6] 

,我想在我的(MySQL的)的情況下資料庫選擇記錄列表,這些記錄的ID在X。像下面的東西:

SELECT * FROM mytable WHERE id IN x 

但我不知道誰可以在python中做到這一點。我在他們的sql字符串中看到了一些使用%s的例子。但是,當變量是一個列表時,這不起作用。有誰知道我該怎麼做? 感謝

回答

3

嘗試這樣:

'(%s)' % ','.join(map(str,x)) 

這會給你,你可以用它來發送到MySQL作爲一個有效的IN子句的字符串:

(1,2,3,4,5,6) 
+0

如果x是空列表,請注意,因爲「IN()」似乎不是有效的語法(至少在SQL Server中)。 –

1

好了,如果所有這些被稱爲是信譽良好的號碼,那麼你可以簡單地調用

"SELECT * FROM mytable WHERE ID IN ({0})".format(','.join(x)) 

如果你知道他們是數字,但它們中的任何可能已經從用戶,那麼我可能會使用:

"SELECT * FROM mytable WHERE ID IN ({0})".format(','.join(list(map(int,x)))) 

format會在適當的指標進行更換。加入被使用,以便您沒有[]。列表將所有內容都轉換爲列表,map將一個函數應用於列表/元組/可迭代。然而,在Python 3中,map會返回一個生成器,這不是您所需要的。你需要一個列表。所以,list(map(x,y))將返回map(x,y)的列表形式。

+0

應當指出的是,安德魯的方法作品同樣,但我更喜歡格式,因爲它是一種更加跨語言的語法。 – cwallenpoole