使用python处理查询字符串中的撇号

使用python处理查询字符串中的撇号,python,sql,string,python-3.x,amazon-redshift,Python,Sql,String,Python 3.x,Amazon Redshift,我正在尝试使用Python查询红移。 我正在生成一个查询字符串,如下所示: 我正在使用psycopg2作为库来建立连接 Select lat, lon, gender from table_x where x_name = "namestring" 如果我的姓名字符串包含”,则查询字符串将无法执行 有人能告诉我避免这个错误的方法吗?我有一个大约25k个名字的列表,因此用\'对每个名字进行转义。不是一个选项。使用中强烈建议的参数化查询 这避免了使用参数化查询结构而不是字符串连接的自引用dur的问

我正在尝试使用Python查询红移。 我正在生成一个查询字符串,如下所示: 我正在使用
psycopg2
作为库来建立连接

Select lat, lon, gender from table_x where x_name = "namestring"
如果我的姓名字符串包含
,则查询字符串将无法执行


有人能告诉我避免这个错误的方法吗?我有一个大约25k个名字的列表,因此用
\'对每个名字进行转义。
不是一个选项。

使用中强烈建议的参数化查询

这避免了使用参数化查询结构而不是字符串连接的自引用dur的问题



请参阅和google sql injection以了解不使用字符串concatenate的其他原因。

您可以在字符串中使用单引号,并使用参数化字符串替换您的值

QUERY = """select lat, lon, gender from table_x where x_name = '{namestring}'"""
for namestring in list_of_namestrings:
    cur.execute(QUERY.format(namestring=namestring) 

这应该可以解决您的问题,您可以根据需要使查询变得复杂,并使用
.format()

进行所需的替换。如果您正在迭代名称字符串,您不能在执行查询之前,在那里转义引号吗?转义单个引号的ANSI标准方法是将其加倍,也就是说,在查询字符串中使用
'
。当表名是join子句时,您能帮助解决这个问题吗?在连接的情况下,
sql.identifier
如何工作?@SumedhaNagpal不,我不能。请参阅文档。你所问的(关于“销毁你的查询”)比任何数量的类似Sql的查询都要常见——使用参数化查询是解决这一问题的方法。对于联合查询,请使用psycopg提供的API并对其进行研究。
QUERY = """select lat, lon, gender from table_x where x_name = '{namestring}'"""
for namestring in list_of_namestrings:
    cur.execute(QUERY.format(namestring=namestring)