read_sql和redshift在unicode上给出错误

时间:2016-09-19 08:07:49

标签: python mysql pandas unicode amazon-redshift

查询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中的某些参数

1 个答案:

答案 0 :(得分:0)

我怀疑有人替换了一个标记(我已使用{something})模板,就会生成该错误消息,如

'syntax error at or near "{something}"'

这意味着您应该将其视为对单个字符串的投诉,其值似乎是

'"Hello \' There"'

换句话说,你可能正在处理以双引号字符开头和结尾的十五个字符的字符串,尽管总有一些不适当的转换或引用可能添加了双引号。没有代码,没有追溯,很难说。

似乎处理链中某处无法正确处理SQL字符串文字中的单个撇号。在SQL中,该字符串将正确表示为

'"Hello, ''There"'

您将观察到字符串中嵌入的单引号必须加倍才能表示它 - SQL语法特别指出这是在SQL字符串常量中嵌入撇号的正确方法。由于您实际上并未显示代码的详细信息,因此对此答案的帮助有限。

我怀疑您可能正在编写自己的SQL,在这种情况下,在变量sql中给出一个查询,您可能需要考虑使用

sql.replace("'", "''")

作为注入查询的值。但是如果您计划将用户输入合并到此方案中,请注意有关SQL注入的所有常见警告。