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

窗口函数在 pd.read_sql 中不起作用;它显示错误

pandas read_sql 没有读取所有行

使用 pandas.read_sql 和 MSAccess 的特定表名的“sql 执行失败”

您可以并行或异步运行“pd.read_sql”吗?

带参数的 Pandas read_sql