查询1:使用pandas read_sql从MySQL读取。生成的数据框有一个列,其数据类型为unicode字符串。此列将转换为元组,并在以下查询中使用。
查询2:使用pandas read_sql从Redshift读取。查询类似于
select b.a from b where b.c in {0}
在一个字符串上,它给了我一个错误。该字符串就像你的“Hello' There”这是一个有效的unicode字符串。 错误是
syntax error at or near ""Hello 'There""
但它不应该这样。它将它视为一个空字符串(“”),然后是不可理解的符号,如(Hello'At There“”)
是否应更改某些配置或添加read_sql中的某些参数
答案 0 :(得分:0)
我怀疑有人替换了一个标记(我已使用{something}
)模板,就会生成该错误消息,如
'syntax error at or near "{something}"'
这意味着您应该将其视为对单个字符串的投诉,其值似乎是
'"Hello \' There"'
换句话说,你可能正在处理以双引号字符开头和结尾的十五个字符的字符串,尽管总有一些不适当的转换或引用可能添加了双引号。没有代码,没有追溯,很难说。
似乎处理链中某处无法正确处理SQL字符串文字中的单个撇号。在SQL中,该字符串将正确表示为
'"Hello, ''There"'
您将观察到字符串中嵌入的单引号必须加倍才能表示它 - SQL语法特别指出这是在SQL字符串常量中嵌入撇号的正确方法。由于您实际上并未显示代码的详细信息,因此对此答案的帮助有限。
我怀疑您可能正在编写自己的SQL,在这种情况下,在变量sql
中给出一个查询,您可能需要考虑使用
sql.replace("'", "''")
作为注入查询的值。但是如果您计划将用户输入合并到此方案中,请注意有关SQL注入的所有常见警告。