【问题标题】:Python: strange SQLite3 query resultPython:奇怪的 SQLite3 查询结果
【发布时间】:2013-10-08 04:13:21
【问题描述】:

我在 Python3 中使用 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 中测试了两个查询都没有问题。

我错过了什么吗?

【问题讨论】:

    标签: python python-3.x sqlite


    【解决方案1】:

    The sqlite BETWEEN operator is equivalent to x&gt;=y AND x&lt;=z,所以当y &gt; 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> 
    

    【讨论】:

    • 在两个查询中,BETWEEN 运算符是相同的。我只是使用 DESC 反转结果。此外,这两个查询都已在 SQLite 中进行了测试,没有任何问题。
    • 在下限大于上限时尝试测试查询:BETWEEN 27 and 25else 子句确保是这种情况。
    猜你喜欢
    • 2018-09-01
    • 2013-09-04
    • 1970-01-01
    • 1970-01-01
    • 2021-06-07
    • 1970-01-01
    • 1970-01-01
    • 2020-05-11
    • 2017-02-26
    相关资源
    最近更新 更多