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

2024-04-25 21:58:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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: column "METEOROLOGY:WINDSPEED_F" does not exist

(确实如此)。你知道吗

我也尝试过用我能想到的任何方法(如反斜杠)来转义冒号,但没有任何效果,我只是得到语法错误。你知道吗

任何建议都欢迎。谢谢。你知道吗

新增20190429

我现在尝试了参数化查询,但也没有成功。你知道吗

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

我尝试了许多不同的双引号和单引号组合,试图逃出冒号,但都没有成功。你知道吗


Tags: namefrombyorderwherestructureselectlike
1条回答
网友
1楼 · 发布于 2024-04-25 21:58:12

psycopg2.ProgrammingError: column "METEOROLOGY:WINDSPEED_F" does not exist

出现此错误是因为您在查询的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")

因为存在值为“M”的0行ETEOROLOG:风速在name列中。这可能是因为你把气象学拼写错了。

你使用LIKE的方式,也可以使用=。^如果要使用%来查找其他值,如该值,则{}非常有用。你知道吗

示例:

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

这将返回name中这些值的结果:JOSHUA,JOSHUA,JOSHUA,josh,josh。如果我直接做了NAME LIKE 'JOSH',那么我只能找到JOSH的精确值的结果。你知道吗

由于要在WHERE中设置值all caps,请尝试这样做:向查询中添加一个UPPER()

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

相关问题 更多 >