2012-12-06 57 views
-1

我試圖連接動態插入語句(超過100個插入),而是逐個執行,我想將所有語句連接成只有一個變量。連接SQL語句字符串

以下,基本爲例:

insert_ = " insert into table (field,zone) values ('a','b'); " 
insert_b = " insert into table (field,zone) values ('c','d'); " 
insert_c = " insert into table (field,zone) values ('e','f'); " 

list = [] 
list.append(insert_) 
list.append(insert_b) 
list.append(insert_c) 
print list 

電流輸出:

[" insert into table (field,zone) values ('a','b'); ", " insert into table (field,zone) values ('c','d'); ", " insert into table (field,zone) values ('e','f'); "] 

所需的輸出:

insert into table (field,zone) values ('a','b'); insert into table (field,zone) values ('c','d'); insert into table (field,zone) values ('e','f'); 

感謝您的閱讀。

+1

爲什麼?如果你這樣做是因爲我認爲的原因,可能有更好的辦法... – RonaldBarzell

+0

性能,大多數情況下,我注意到我可以在不到5秒的時間內同時進行1000次插入。通過在一個循環上執行一個插入,我在打開和關閉與數據庫的連接時鬆了一秒鐘。 –

+2

不要永遠建立你自己的SQL語句,使用Python [DB API](http://www.python.org/dev/peps/pep-0249/)或者像[SQLAlchemy]這樣的ORM(http: //www.sqlalchemy.org)。否則,你冒着像SQL注入這樣的攻擊風險。 –

回答

7
c = db.cursor() 
values_to_insert = [("a","b"),("c","d"),...] 
c.execute_many("INSERT INTO table (val1,val2) VALUES (?,?)",values_to_insert ) 

這就是execute_many爲...

+0

+1易於使用,清晰度,可重用性,輸入消毒,... –

+0

謝謝你指出=) –

3

簡單爲"".join(list)。或者不要使用列表,只需使用字符串連接,正如Hemesh所說。

此外,請不要列出您的名單「名單」。這是python中的一個保留關鍵字(我有時會自己陷入這個陷阱,但這是一個非常糟糕的主意)。

+0

+1不使用保留字 – Anov

2

只需連接所有這些,不需要使用列表。

insert = insert_ + insert_b + insert_c 
+0

以及如果使用變量,結果是for循環的結果呢? –

+1

insert =「」 for q in li: insert + = q' –

+0

在評論中編寫代碼非常困難。 :(但我希望它是有道理的。 –

1

由於join和簡單的加法已經提出,以下是完整的另一種選擇:

insert = '%s %s %s' % (insert_a, insert_b, insert_c)