2013-10-07 3 views
0

Я получаю неожиданные результаты с запросом SQLite3 в Python3.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

Смежные вопросы