我有一个元组列表,我正在尝试将其合并到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') "
答案 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是相当不安全的。