SELECT命令找不到带冒号的列名

时间:2019-04-29 10:39:10

标签: python postgresql psycopg2

我有一个python脚本,用于从PostgreSQL数据库中检索值(表ID)。列名中包含一个冒号,但我相信这会使它停止工作。我已经在没有冒号的列上对其进行了测试,并且确实可以正确获取ID。

有问题的行是

cur.execute("SELECT tID from titles where name like 'METEOROLOG:WINDSPEED_F' order by structure, comp1, comp2")
rowswind=cur.fetchall()

当我打印行风时,什么也不会返回(只是空括号)

我也尝试过。.

cur.execute('SELECT tID from titles where name like "METEOROLOGY:WINDSPEED_F" order by structure, comp1, comp2')

但这又返回错误

  

psycopg2.ProgrammingError:“ METEOROLOGY:WINDSPEED_F”列不   存在

(确实如此)。

我也尝试过以任何我能想到的方式来使冒号转义(即反斜杠),但没有任何效果,我只是遇到语法错误。

任何建议都将受到欢迎。谢谢。

添加20190429

我现在已经尝试对查询进行参数化,但是也没有成功。

wind=('METEOROLOGY:WINDSPEED_F')
sql="SELECT tID from titles where name like '{0}' order by structure, comp1, comp2".format(wind)

我尝试使用双引号和单引号的许多不同组合来尝试逃脱冒号而没有成功。

1 个答案:

答案 0 :(得分:0)

  

psycopg2.ProgrammingError:列“ METEOROLOGY:WINDSPEED_F”不存在

由于在查询的WHERE语句中的目标值周围使用双引号引起了此错误,

cur.execute('SELECT tID from titles where name like "METEOROLOGY:WINDSPEED_F" order by structure, comp1, comp2')

您将在这里获得0条结果:

cur.execute("SELECT tID from titles where name like 'METEOROLOG:WINDSPEED_F' order by structure, comp1, comp2")

因为在name列中存在0行,其值为“ METEOROLOG:WINDSPEED_F”。 这可能只是因为您拼写错误的气象学。

您使用LIKE的方式也可能会使用=。如果您要使用LIKE查找其他 like 值,则%很棒。

示例:

SELECT * 
FROM
    TABLE 
WHERE
    UPPER(NAME) LIKE 'JOSH%'

这将返回name中这些值的结果:JOSHUA,JoShUa,joshua,josh,JOSH。如果我直接进行NAME LIKE 'JOSH',那么我只会找到与JOSH的确切值有关的结果。

由于您要在WHERE中使用全大写值,因此请尝试向查询中添加UPPER(),如下所示:

cur.execute("SELECT tID from titles where UPPER(name) like 'METEOROLOG:WINDSPEED_F' order by structure, comp1, comp2")