2013-10-07 167 views
0

我得到意想不到的结果与Python3中的SQLite3查询。Python:奇怪的SQLite3查询结果

if first_waypoint_number < last_waypoint_number: 
     result = list(c.execute("SELECT WPNumber, WPID, ROUTE FROM rte WHERE ROUTE = ? AND WPNumber BETWEEN ? AND ?", (route, first_waypoint_number, last_waypoint_number))) 
     print(result) 
else: 
     result = list(c.execute("SELECT WPNumber, WPID, ROUTE FROM rte WHERE ROUTE = ? AND WPNumber BETWEEN ? AND ? ORDER BY WPNumber DESC", (route, first_waypoint_number, last_waypoint_number))) 
     print(result) 

第一个查询就像预期,并产生这样的结果:

[('A123', 25, 'WAYPOINTX'), ('A123', 26, 'WAYPONTY'), ('A123', 27, 'WAYPOINTZ')] 

第二个查询然而,产生一个空列表[],而它应该返回按相反的顺序相同的列表。

我已经在SQLite3中测试了两个查询没有问题。

我在这里错过了什么吗?

回答

2

The sqlite BETWEEN operator is equivalent to x>=y AND x<=z,所以当y > z时它什么都不匹配。

sqlite> create table foo (x int); 
sqlite> insert into foo values (1); 
sqlite> insert into foo values (2); 
sqlite> insert into foo values (3); 
sqlite> insert into foo values (4); 
sqlite> select * from foo; 
1 
2 
3 
4 
sqlite> select * from foo where x between 2 and 3; 
2 
3 
sqlite> select * from foo where x between 3 and 2; 
sqlite> 
+0

在这两个查询中,BETWEEN运算符都是相同的。我只是使用DESC来反转结果。此外,这两个查询都已经在SQLite中测试过了,没有任何问题。 – Caesius

+1

当下限大于上限时尝试测试查询:“BETWEEN 27和25”。 'else'子句确保是这种情况。 – hamstergene

+0

Doh ..当然是的。我的错! – Caesius