pd.read_sql_query 单/双引号格式化

Posted

技术标签:

【中文标题】pd.read_sql_query 单/双引号格式化【英文标题】:pd.read_sql_query single / double quotes formatting 【发布时间】:2019-05-21 22:24:14 【问题描述】:

我正在使用 Python(Jupyter Notebook) 和 Postgres 数据库,并且正在努力填充 Pandas 数据框。

使用 pgAdmin4 中的查询生成器可以正常运行 sql 代码

SELECT "Date","Close" FROM test WHERE "Symbol" = 'AA'

但是我无法在我的 Jupyter 笔记本中使用它,我认为它与单引号和双引号有关,但不知道要更改什么并且碰壁了。在我正在尝试的笔记本中

df = pd.read_sql_query('SELECT "Date","Close" FROM public.test WHERE "Symbol" = AA', conn)

但不知道在查询的 AA(数据)部分周围使用什么引号,如果我使用双引号,pandas 认为 AA 是一列,如果我使用单引号,它会破坏字符串。

如果有人能指出我正确的方向,我将不胜感激。

谢谢

【问题讨论】:

猜一猜:去掉字段名的引号。 df = pd.read_sql_query('SELECT Date, Close FROM public.test WHERE Symbol = AA', conn) 您是否尝试将查询作为raw string 传递? 应该这样做:df = pd.read_sql_query("SELECT [Date], [Close] FROM public.test WHERE Symbol = 'AA'", conn)。您需要将单引号与双引号结合起来。让我知道它是否有效。 【参考方案1】:

这将起作用:

df = pd.read_sql_query("SELECT Date,Close FROM public.test WHERE Symbol = 'AA'", conn)

Sql 字符必须有单引号,但列名根本不需要引号。

如果你真的在 sql 查询中需要双引号,那么只需确保在 python 字符串上使用三外引号,如下所示:

df = pd.read_sql_query("""SELECT "Date" FROM public.test WHERE Symbol = 'AA'""", conn)

【讨论】:

感谢大家的帮助,将列名从引号中取出是一个很大的帮助,我还必须将列名更改为全小写才能使其正常工作。再次感谢,没有这个网站我会迷路 如果您对答案感到满意,请将其标记为已接受,以便以后的读者知道。很高兴我能帮上忙。【参考方案2】:

如果您有一个巨大的查询,您可以使用三引号,您可以像这样在多行中声明它:

df = pd.read_sql_query("""SELECT "Date","Close" 
                          FROM public.test 
                          WHERE Symbol = 'AA'""", conn)

@Marjan Moderc 的解决方案当然也可以。

【讨论】:

以上是关于pd.read_sql_query 单/双引号格式化的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio Code 使用双引号格式化代码,尽管 linter 代码样式需要单引号

Python如何将单引号转换为双引号以格式化为json字符串

VSCode格式化,单引号变双引号的解决办法

Python学习之单引号双引号三引号

eslint校验 自动格式化(letvar自动格式化const,双引号自动格式化单引号,及自动去掉末尾逗号,分号)

shell脚本中单引号和双引号的区别