使用psycopg2查询含空格字符串时出现SQL语法错误的问题
解决psycopg2查询带空格字符串的语法错误
你的问题核心是SQL字符串语法错误,以及没有采用psycopg2推荐的参数化查询方式,以下是具体解决方案:
错误原因
原SQL语句中my product未用单引号包裹,SQL解析器会将my和product识别为两个独立标识符,导致解析中断。你尝试的引号写法要么在Python字符串中被转义失效,要么不符合psycopg2的处理逻辑。
正确解决方案:使用参数化查询(推荐)
psycopg2官方推荐用参数化查询处理动态值,既解决引号问题,又能避免SQL注入风险:
find_id = 'SELECT "serial_number" FROM "LogFiles" WHERE "LogFiles"."user_name" = %s;' cur.execute(find_id, ('my product',)) result = cur.fetchall()
- 用
%s作为占位符,无需手动添加引号 - 将查询参数放在元组中传给
execute()的第二个参数,psycopg2会自动处理字符串转义和引号包裹
不推荐的直接拼接方式(仅作参考)
如果一定要直接拼接SQL字符串,需确保SQL中的字符串被单引号包裹,同时在Python字符串中正确处理引号:
# 方式1:用反斜杠转义单引号 find_id = 'SELECT "serial_number" FROM "LogFiles" WHERE "LogFiles"."user_name" = \'my product\';' # 方式2:用双引号包裹Python字符串 find_id = "SELECT \"serial_number\" FROM \"LogFiles\" WHERE \"LogFiles\".\"user_name\" = 'my product';"
这种方式存在SQL注入风险,若查询值来自用户输入,绝对不要使用。
内容的提问来源于stack exchange,提问作者Sara
相关产品推荐
相关产品推荐

