2012-12-06 58 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)