我有一個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的例子。但是,當變量是一個列表時,這不起作用。有誰知道我該怎麼做? 感謝
我有一個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的例子。但是,當變量是一個列表時,這不起作用。有誰知道我該怎麼做? 感謝
嘗試這樣:
'(%s)' % ','.join(map(str,x))
這會給你,你可以用它來發送到MySQL作爲一個有效的IN
子句的字符串:
(1,2,3,4,5,6)
好了,如果所有這些被稱爲是信譽良好的號碼,那麼你可以簡單地調用
"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)的列表形式。
應當指出的是,安德魯的方法作品同樣,但我更喜歡格式,因爲它是一種更加跨語言的語法。 – cwallenpoole
如果x是空列表,請注意,因爲「IN()」似乎不是有效的語法(至少在SQL Server中)。 –