Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将元组列表转换为字符串?_Python_Sql_Formatting - Fatal编程技术网

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

Python 如何将元组列表转换为字符串?,python,sql,formatting,Python,Sql,Formatting,我有一个元组列表,我正试图将其合并到SQL查询中,但我不知道如何在不添加斜杠的情况下将它们连接在一起。我的朋友喜欢这样: list = [('val', 'val'), ('val', 'val'), ('val', 'val')] 如果我把每个元组转换成一个字符串,并尝试用逗号连接它们,我会得到如下结果 ' (\'val\, \'val\'), ... ' 正确的方法是什么,这样我就可以得到一个字符串形式的列表(没有括号) 我想以:: q = """INSERT INTO test (f

我有一个元组列表,我正试图将其合并到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') "
像这样

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

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

将产生:

'val,val,val,val,val,val'
这:

将产生:

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

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


例如,.

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

例如

不过,正如其他人所指出的,在要发送到MySQL的字符串占位符中执行此操作是相当不安全的


但是,正如其他人所指出的,在一个字符串占位符中这样做是相当不安全的。

使用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)

使用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)

另外,不要使用内置类型作为变量,这可能会很危险。尝试合并到SQL查询中。您能告诉我们您实际在做什么吗?也不要使用内置类型作为变量,这可能很危险。尝试合并到SQL查询中。你能告诉我们你到底在做什么吗?有点。我的目标是保留括号。我更改了OP.matt,您可以尝试
,'.join(map(str,l))
来获得
“('val','val'),('val','val'),('val','val'),('val','val')”,
,但我仍然认为您需要使用MySQLdb函数,而不是编字符串。我的目标是保留括号。我更改了OP.matt,您可以尝试使用
,'.join(map(str,l))
来获得
“('val','val'),('val','val'),('val','val'),('val','val')”,
,但我仍然认为您需要使用MySQLdb函数,而不是编字符串。我再次更改了帖子,以显示我的想法。还是假的吗?@马特:是的。你在用什么图书馆?什么数据库?你有文档吗?MySQLdb,我想我会启动Googlin。我不明白为什么这是个坏习惯。我可以把csv上的所有东西都拿出来,然后轻松地放在桌子上。(假设我真的可以)@matt:展示你到底想做什么我又换了一次帖子来展示我的想法。还是假的吗?@马特:是的。你在用什么图书馆?什么数据库?你有文档吗?MySQLdb,我想我会启动Googlin。我不明白为什么这是个坏习惯。我可以把csv上的所有东西都拿出来,然后轻松地放在桌子上。(假设我真的可以)@matt:show如何做你想做的事情既然还没有人明确解释,我想它不安全的原因是如果L包含用户提供的值,恶意用户可能会提供一个值,该值会在你的数据库上执行任意SQL命令。因为还没有人明确解释,我认为它不安全的原因是,如果L包含用户提供的值,恶意用户可能会提供一个值,该值将在您的数据库上执行任意SQL命令。由于您的答案最直接,最适合您的真实问题(以及编辑后的问题),您应该将其选择为“the”通过点击票数下方的复选标记进行回答。由于您的答案最直接、最适合您的真实问题(以及编辑后的问题),您应该通过点击票数下方的复选标记将其选择为“答案”。