read_sql 和 redshift 在 unicode 上给出错误
Posted
技术标签:
【中文标题】read_sql 和 redshift 在 unicode 上给出错误【英文标题】:read_sql and redshift giving error on unicode 【发布时间】:2016-09-19 08:07:48 【问题描述】:查询 1:使用 pandas read_sql 从 mysql 读取。生成的数据框有一个数据类型为 unicode 字符串的列。此列将转换为元组并用于以下查询。
查询 2:使用 pandas read_sql 从 Redshift 读取。查询类似于
select b.a from b where b.c in 0
在一个字符串上,它给了我一个错误。该字符串类似于 u"Hello 'There" ,它是一个有效的 unicode 字符串。 错误是
syntax error at or near ""Hello 'There""
但它不应该那样做。它将它视为一个空字符串(“”),后跟无法理解的符号,如 (Hello 'There"")
是否应该更改某些配置或添加read_sql中的某些参数
【问题讨论】:
【参考方案1】:我怀疑该错误消息是由某人替换标记(我使用过something
)生成的,类似于
'syntax error at or near "something"'
这意味着您应该将其视为对单个字符串的抱怨,该字符串的值似乎是
'"Hello \' There"'
换句话说,您似乎正在处理以双引号字符开头和结尾的 15 个字符的字符串,尽管总是有可能某些不适当的转换或引用添加了双引号。没有代码,没有回溯,很难说。
似乎在处理链中的某个地方无法正确处理 SQL 字符串文字中的单个撇号。在 SQL 中,该字符串将正确表示为
'"Hello, ''There"'
您将观察到嵌入在字符串中的单引号必须加倍才能表示它 - SQL 语法特别指出这是在 SQL 字符串常量中嵌入撇号的正确方法。由于您实际上并未显示代码的详细信息,因此此答案的帮助有限。
我怀疑您可能正在编写自己的 SQL,在这种情况下给定变量 sql
中的查询,您可能要考虑使用
sql.replace("'", "''")
作为注入查询的值。但是,如果您打算将用户输入合并到此方案中,请注意所有关于 SQL 注入的常见警告。
【讨论】:
值不是'"Hello, ''There"'
,而是"Hello, 'There"
,或者你可以说'Hello, \'There'
而且我正在使用 pandas 来读取 sql 而不是原生 python 的使用方式
在元组中可以看成u"Hello 'There"
以上是关于read_sql 和 redshift 在 unicode 上给出错误的主要内容,如果未能解决你的问题,请参考以下文章
在 pandas 中为 read_sql 指定 dtypes