如何将元组列表转换为字符串?

时间:2010-05-24 12:54:04

标签: python sql formatting

我有一个元组列表,我正在尝试将其合并到SQL查询中,但我无法弄清楚如何在不添加斜杠的情况下将它们连接在一起。我喜欢这样:

list = [('val', 'val'), ('val', 'val'), ('val', 'val')]

如果我将每个元组变成一个字符串并尝试用逗号加入它们,我会得到类似

的内容
' (\'val\, \'val\'), ...  '

这样做的正确方法是什么,所以我可以将列表(没有括号)作为字符串?

我想以::

结束
q = """INSERT INTO test (feed,site) VALUES %s;"""  % string
string = " ('val', 'val'), ('val', 'val'), ('val', 'val') "

5 个答案:

答案 0 :(得分:3)

喜欢这个吗?

>>> l=[('val', 'val'), ('val', 'val'), ('val', 'val')]
>>> ','.join(map(','.join,l))
'val,val,val,val,val,val'

答案 1 :(得分:2)

使用MySQLdb,executemany就是这样做的。

cursor = db.cursor()
vals = [(1,2,3), (4,5,6), (7,8,9), (2,5,6)]
q = """INSERT INTO first (comments, feed, keyword) VALUES (%s, %s, %s)"""  
cursor.executemany(q, vals)

答案 2 :(得分:1)

此:

",".join( x+","+y for x,y in lst )

将产生:

'val,val,val,val,val,val'

答案 3 :(得分:1)

您不应该这样做。查看用于执行SQL语句的函数的定义。他们将负责格式化。 SQL语句本身应该只包含占位符。

例如,official docs for MySQLdb show how to do exactly what you want

答案 4 :(得分:1)

>>> L = [('val', 'val'), ('val', 'val'), ('val', 'val')]
>>> ','.join([repr(tup) for tup in L])
"('val', 'val'),('val', 'val'),('val', 'val')"

尽管正如其他人所指出的那样,在字符串占位符中执行此操作意味着发送到MySQL是相当不安全的。