【问题标题】:pd.read_sql_query single / double quotes formattingpd.read_sql_query 单/双引号格式化
【发布时间】: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)。您需要将单引号与双引号结合起来。让我知道它是否有效。

标签: python sql postgresql pandas quotes


【解决方案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 的解决方案当然也可以。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-26
    • 1970-01-01
    • 2020-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-19
    • 1970-01-01
    相关资源
    最近更新 更多