2011-05-10 78 views
2

在MYSQL刪除多行與信息如果列表LL:從Python列表

LL = ['foo', bar', 'noo', 'boo',]

是在一個MySQL表,測試中列ID與其它ID的。

我可以使用下面的ID爲在LL刪除所有行:

csr.execute("""DELETE FROM test.test WHERE ID = "Foo"; """) 
    csr.execute("""DELETE FROM test.test WHERE ID = "bar"; """) 
    csr.execute("""DELETE FROM test.test WHERE ID = "noo"; """) 
    csr.execute("""DELETE FROM test.test WHERE ID = "boo"; """) 

我怎麼能做到這一點編程?

回答

5

您可以使用單個查詢做到這一點:在做替換時

id_list = ['abc', 'def', 'ghi'] 
query_string = "delete from test where id in (%s)" % ','.join(['?'] * len(id_list)) 
cursor.execute(query_string, id_list) 

由於cursor.execute逃脫字符串,這個例子是針對SQL注入安全。

+0

不,請查看答案中的查詢字符串如何顯示「where id in ...」not「where id = ...」 – 2011-05-10 20:33:13

+0

@ user428862「in('abc','hjk',...)」適用於MySQL的。它優先於「where id ='abc'或id ='hjk'」。但是,我的例子包含語法錯誤和數字ID。嘗試更新的版本。 – sapht 2011-05-10 20:34:10

+0

id_list = ['acb','def',] SQL包含0個參數標記,但提供了2個參數' – Merlin 2011-05-10 20:39:29

1

字符串格式化 - http://docs.python.org/library/string.html#format-string-syntax

["""DELETE FROM test.test WHERE ID = "%s"; """ % x for x in LL] 

,然後運行列表中的每個SQL語句的。

+0

「LL」僅包含可信項目至關重要。如果它包含來自不受信任來源的數據並且沒有正確轉義,則可以使用SQL注入。 – 2017-07-23 08:21:09

2
for item in LL: 
    csr.execute("DELETE FROM test.test WHERE ID = '%s'", item) 

那樣?

+0

每個?不需要.. – Merlin 2011-05-10 20:21:17

+0

錯字 - 每個'應該是'項目'。固定。 – tMC 2011-05-10 20:28:49