加入字符串列表,使每个字符串在引号内并以逗号分隔

时间:2015-09-02 14:18:56

标签: python

考虑一下我有一个客户名单:

lst = ['John','Jack','Martin']

变量中的所需输出:'John','Jack','Martin'

我可以使用类似",".join(lst)的内容,然后使用更多字符串格式来实现此目的。有没有明确和更直接的方法呢?

我的想法是在SQL where子句中传递字符串的元素。

6 个答案:

答案 0 :(得分:11)

使用它来生成SQL查询。请改用数据库驱动程序SQL参数。你无法希望正确地逃脱SQL注入攻击的方式。

如果您需要使用WHERE .. IN ..测试,请生成占位符:

query = 'SELECT * FROM table WHERE column IN ({})'.format(','.join(['%s'] * len(lst)))
cursor.execute(query, lst)

对于其他所有内容,使用列表推导将引号添加到值中,然后使用逗号连接结果:

', '.join(['"{}"'.format(value) for value in lst])

演示:

>>> lst = ['John','Jack','Martin']
>>> ', '.join(['"{}"'.format(value) for value in lst])
'"John", "Jack", "Martin"'
>>> print ', '.join(['"{}"'.format(value) for value in lst])
"John", "Jack", "Martin"

这将始终使用"双引号;如果您必须使用单引号,只需使用"'{}'"作为模板。

答案 1 :(得分:4)

如果您将此传递给SQL并且它是用户提供的数据,那么您应该查看将为您处理正确引用/参数化的模块,例如: Postgres的psycopg2。我相信MySQL有一个等价物。

使用像str.join这样的简单技术可能会让您对SQL注入攻击持开放态度,除非您在切换到SQL之前非常小心地检查结果。

如何在psycopg2中执行此操作的示例:

http://initd.org/psycopg/docs/usage.html#passing-parameters-to-sql-queries

作为一个副作用,这也为你处理类型,即它知道将整数作为数字传递,将字符串作为引用的字符串传递等。

答案 2 :(得分:0)

步骤1.实际更改列表的每个元素,使其带引号(如果它不是字符串,则将其转换为字符串。)

f = lambda x: "'"+str(x)+"'"
lst = map(f,lst)

步骤2.使用逗号,

加入每个元素
','.join(lst)

Python Shell的输出

>>> f = lambda x: "'"+str(x)+"'"
>>> lst = [1,2,3,4,5]
>>> lst = map(f,lst)
>>> lst
["'1'", "'2'", "'3'", "'4'", "'5'"]
>>> ','.join(lst)
"'1','2','3','4','5'"

答案 3 :(得分:0)

如果您使用的是兼容odbc的数据库。 取自pyodbc文档:

cursor.execute(
    """
    select user_id, user_name
      from users
     where last_logon < ?
           and bill_overdue = ?
    """, '2001-01-01', 1)

使用列表:

cursor.execute(
    """
    select user_id, user_name
      from users
     where last_logon < ?
           and bill_overdue = ?
    """, lst)

答案 4 :(得分:0)

您可以使用repr使每个字符串成为有效的Python输入:

lst = ['John','Jack','Martin']
output = ','.join(map(repr,lst))

答案 5 :(得分:0)

要获得所需的输出,您仍然可以使用true false false ,如下所示:

join

这会显示:

lst = ['John','Jack','Martin']
print "'"+"','".join(lst)+"'"

或者,您可以使用'John','Jack','Martin' 来避免字符串连接:

format()

请注意其他关于其与SQL一起使用的评论。