使用python在字符串中创建多个字符串

使用python在字符串中创建多个字符串,python,string,Python,String,我对使用python编写sql字符串还不熟悉,想知道是否有人可以帮助我。现在我正在写一个sql语句,像这样 sql_statement = """SELECT * from some_database WHERE FirstName IN (%(first_names)s)""" first_names = ['fn1', 'fn2', 'fn3'] 我希望字符串最终像这样,从某个_数据库中选择*,其中FirstName位于'fn1','fn2','fn3',列表中的每个元素在sq

我对使用python编写sql字符串还不熟悉,想知道是否有人可以帮助我。现在我正在写一个sql语句,像这样

   sql_statement = """SELECT * from some_database WHERE FirstName IN (%(first_names)s)"""
   first_names = ['fn1', 'fn2', 'fn3']
我希望字符串最终像这样,从某个_数据库中选择*,其中FirstName位于'fn1','fn2','fn3',列表中的每个元素在sqlstatement中都成为自己的字符串。这在Python中是可能的吗?

您可以使用来实现这一点:

>>> sql_statement = """SELECT * from some_database WHERE FirstName IN {}"""
>>> first_names = ['fn1', 'fn2', 'fn3']
>>> 
>>> sql_statement.format(repr(tuple(first_names)))
"SELECT * from some_database WHERE FirstName IN ('fn1', 'fn2', 'fn3')"
>>> 

警告:虽然这只是一个普通字符串,但由于SQL注入,请非常小心地将其用作SQL语句。更好的方法可能是在您的SQL API库中调用cur.execute或等效的方法。

如果您正在调用cur.execute,请尝试:cur.executeSELECT*从FirstName in,first_names所在的某个数据库中选择*。这本身是可以的,但请记住,在处理SQL语句时,SQL注入始终是一个问题。@cᴏʟᴅsᴘᴇᴇᴅ 是的,这是一个正确的观点,我知道这个事实。我只是简单地提供了OP要求的内容。@ChristianDean:鉴于问题的性质,我可以建议在您的回答中添加一条警告吗?这不仅仅是一个字符串替换,而是一个SQL查询?很多人都在堆栈溢出驱动的开发中实现了第一个答案,这样就可以工作了。你的答案可能会被接受,因为它会起作用,然后其他人会搜索类似的内容,查看你的回复,然后继续,而不必费心阅读评论,最糟糕的是,阅读文档。把他们的命运视为自然选择可能是诱人的。“如果不是为了慈善的灵魂,我早就死了。”朱古塔哈贾尔好吧,你说服了我。我再加一个。谢谢。。抱歉再次打扰您:注意事项不在使用cursor.execute中。为了避免SQL注入,我们首先需要执行查询以进行注入,这是关于正确处理参数的。有关详细信息,请参见需要注意的一个属性是paramstyle。无论您使用sqlite3还是psycopg2,等等:sqlite3.paramstyle返回'qmark',psycopg2.paramstyle返回'pyformat'。