我无法使用WHERE CLAUSE找到记录:
SELECT sensor FROM table WHERE type = 'FEET'
表中有'type'列值为'FEET'的记录,所以我认为格式有问题。结果将超过'FEET',因此它根本无法找到等于'FEET'的那些。
为了找出列类型中的记录,我使用以下代码将它们打印出来:
queryTem='SELECT type FROM tide_data'
curs.execute(queryTem)
resultsTem=curs.fetchall()
for resultTem in resultsTem:
print resultTem
print resultTem[0]
resultTem结果如下:
('FEET\n ',)
而resultTem [0]结果如下:FEET,应该是'FEET \ n'。根据上面的信息,有什么方法可以重写WHERE CLAUSE语句并获得正确的记录?因为在语句中:WHERE a = value .. a应该是一个列名,我想不出办法做到这一点。
有人可以帮助我吗?感谢..
答案 0 :(得分:2)
你说“”“因为在声明中:WHERE a = value .. a应该是列名”“”。不是这样,a
可以是任何表达。
你说“”“resultTem结果如下:('FEET \ n',),而resultTem [0]结果如下:FEET,应为'FEET \ n'”“。而不是{{1使用print resultTem[0]
。养成在调试情况下使用print repr(resultTem[0])
的习惯。
正如其他人所指出的那样,您的数据需要清理。如果该repr()
列上有索引,则尾随随机空格将干扰索引。如果你的数据库有一个像Python的type
那样工作的函数(名为STRIP),你应该可以用这样的单行程修复它:
str.strip()
与此同时,您可以执行“STARTwith”类型的查询:
UPDATE table SET type = STRIP(type) WHERE type != STRIP(type);
或使用
SELECT sensor FROM table WHERE type LIKE 'FEET%'
进一步评论:
(1)看起来你的输出字符串是30个字符宽(除非它被你的粘贴和我的编辑所破坏:
SELECT sensor FROM table WHERE STRIP(type) = 'FEET'
额外空格的一种可能解释是列数据类型为('FEET\n ',)
.... v....1....v....2....v....3
。如果这在您的控制之下,您可能希望将其更改为CHAR(30)
或VARCHAR(30)
。请参阅this section of the docs并注意页面中间的“提示”。
(2)似乎没有像VARCHAR
那样简单的SQL函数来删除前导/尾随空格。在PostgreSQL中,你需要像
str.strip()
删除前导和尾随空格,回车符,换行符和制表符。请参阅文档here(和here;阅读第4.1.2.2节。带有C风格转义的字符串常量。)
答案 1 :(得分:1)
resultTem [0]不是“FEET”,它是“FEET \ n”。如果您希望查询起作用,则需要清理数据。
答案 2 :(得分:1)
尝试使用类似的关键字查询。不是最佳但会起作用。
SELECT sensor FROM table WHERE type LIKE'%FEET%'
答案 3 :(得分:0)
看起来当您插入表格时,您没有删除结束语(\ n)
>>> a = ["FEET\n",]
>>> print a
['FEET\n']
>>> print a[0]
FEET
>>>
注意脚后的额外线条。
如果\ n始终附加到该列中的英尺,则可以select sensor from table where type="FEET\n"
。