【问题标题】:How to use select statements for column name ending in +如何对以 + 结尾的列名使用 select 语句
【发布时间】:2020-06-11 18:33:21
【问题描述】:

我正在尝试对列名 solar+ 下的一些数据进行 spearman 关联。但是,当尝试使用 select 语句从 egauge13830 表中选择所需的行数时,加号被视为运算符并导致错误。这些是我尝试过的 2 个语句及其结果:

1)

sql1 = """    
SELECT solar+    
FROM egauge13830    
WHERE tstamp < 1434870960    
"""

sqlalchemy.exc.ProgrammingError: (psycopg2.errors.SyntaxError) 在“FROM”或附近出现语法错误

第 3 行:来自 egauge13830

      ^

2)

sql1 = """    
SELECT 'solar+'    
FROM egauge13830    
WHERE tstamp < 1434870960    
"""

df1 = pd.read_sql_query(sql1, engine)    
print(df1.head())

0   solar+    
1   solar+    
2   solar+    
3   solar+    
4   solar+

我也尝试过更改此列的名称,但找不到不涉及 select 语句的方法,使用它会导致与上述完全相同的问题。

那么,我可以在 select 语句中添加一些内容以使其运行或以其他方式更改列名吗?

感谢所有帮助。

【问题讨论】:

标签: sql postgresql select


【解决方案1】:

在 Gordon 的评论之后才意识到它在 postgres 中的双引号和在 sql server 中的方括号。 'solar+' 会将其视为纯字符串而不是列名,这就是它打印字符串 'solar+' 的原因

sql1 = """

       SELECT "solar+"

       FROM egauge13830

       WHERE tstamp < 1434870960

       """

理想情况下,列的名称不是标准的,因此您可以在拥有权限的情况下更改列的名称。

ALTER TABLE egauge13830
RENAME COLUMN "solar+" TO "solar";

【讨论】:

  • 不敢相信我没想过要尝试这个大声笑。不过谢谢你,这很好用。
  • 如果它解决了您的问题,请考虑将其标记为答案。
  • @VarunT: 使用[] 作为列名是 SQL Server 语法,在 PostgreSQL 中不起作用。你只需要再次使用""
  • @pifor - 是的。没有意识到我还剩下方括号。现在编辑我的答案。
猜你喜欢
  • 2016-07-05
  • 2014-02-11
  • 2012-06-21
  • 2012-02-13
  • 1970-01-01
  • 1970-01-01
  • 2020-07-04
  • 1970-01-01
  • 2011-10-29
相关资源
最近更新 更多