python 为每个列表元素添加引号

iqxoj9l9  于 2023-06-28  发布在  Python
关注(0)|答案(5)|浏览(160)

我对Python很陌生。我需要一个简单明了的脚本添加到每个列表元素的报价。让我再解释一下。这是我的代码。

parameters = ['a', 'b', 'c']
query = "SELECT * FROM foo WHERE bar IN (%s)" % (', '.join(parameters))

我想用这个来查询。但结果是无效查询。这就是结果。

SELECT * FROM foo WHERE bar IN (a, b, c, d)

我想喜欢这个:

SELECT * FROM foo WHERE bar IN ('a', 'b', 'c', 'd')

如何在连接元素时添加引号。

xpszyzbs

xpszyzbs1#

一个简单的解决方案是迭代parameters列表,并在每个元素的开头和结尾附加引号:

(', '.join('"' + item + '"' for item in parameters))

注意:这很容易受到SQL注入(无论是巧合还是故意的)。更好的解决方案是让数据库引用并插入这些值:

query = "SELECT * FROM foo WHERE bar IN (%s)" % ','.join('?' * len(params))
cursor.execute(query, params)

它更容易阅读和正确处理引用。

t9eec4r0

t9eec4r02#

对于简单的参数,以下方法应该有效:

query = "SELECT * FROM foo WHERE bar IN %s" % repr(tuple(map(str,parameters)))

当参数名本身包含引号时,这可能会崩溃,因为转义规则不同。

mgdq6dx1

mgdq6dx13#

如你所问,使用这个:

parameters = ['a', 'b', 'c']
', '.join(map(lambda x: "'" + x + "'", parameters))

由于您正在创建一个SQL查询,请使用您的数据库的有关输入卫生的功能(例如mysqldb)。您不希望最终遇到像Bobby Tables这样的问题。

s71maibg

s71maibg4#

一般情况下(忽略SQL)

In [3]: print(' '.join('"%s"' % x for x in ['a', 'b']))                                                                                                                                              
"a" "b"
jucafojl

jucafojl5#

如果你的列表看起来像

lst = ['abc', '123', 'xyz']
str_row = "( '"+"','".join(map(str, lst))+"')"
print(str_row)

输出将是

( 'abc','123','xyz')

相关问题