我有一个python脚本来从PostgreSQL数据库中检索一个值(表ID)。列名称虽然包含冒号,但我相信这会阻止它正常工作。我已经在没有冒号的列上测试了它,它确实正确地获取了ID。
这条线是
cur.execute("SELECT tID from titles where name like 'METEOROLOG:WINDSPEED_F' order by structure, comp1, comp2")
rowswind=cur.fetchall()
当我打印rowswind时,没有返回任何内容(只是空括号)
我也试过..
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)
我已经尝试了许多不同的双引号和单引号组合来尝试逃避冒号而没有成功。
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”。这可能只是因为你拼错了METEOROLOGY。
你使用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")