0

我正在使用此查询来验证给定路线上是否有 2 个航点(x[0] 和 x[2]):

c.execute("SELECT WPNumber, ROUTE, WPID FROM wpnavrte WHERE ROUTE = ? AND (WPID = ? OR WPID = ?)", (x[1], x[0], x[2]))

如果两个航点都在路线上,则结果应该类似于[('001', 'A123', 'WAYPOINT X'), ('005', 'A123', 'WAYPOINT Y')]

如果航点/路线组合为假,它将返回 None 或一个列表。

检查查询结果是否为双列表(或不是)的最pythonic方法是什么?

4

2 回答 2

1
c.execute("""SELECT t1.WPNumber, t1.ROUTE, t1.WPID, t2.WPID
    FROM wpnavrte t1
    JOIN wpnavrte t2
    ON t1.ROUTE = t2.ROUTE
    WHERE t1.ROUTE = ? AND t1.WPID = ? AND t2.WPID = ?
    """, (x[1], x[0], x[2]))

如果两个航路点在同一条路线上,c.fetchone()则将返回一个 4 元组,其值表示 WPNumber、Route、第一个和第二个 WPID。

如果两个航点不在同一条路线上,c.fetchone()将返回None

于 2013-10-03T10:29:29.397 回答
1

也许最简单的方法是稍微修改你的 SQL 查询(应用 aLIMIT 3来减轻查询,然后检查你只有 2 个):

results = list(c.execute("SELECT WPNumber, ROUTE, WPID FROM wpnavrte WHERE ROUTE = ? AND (WPID = ? OR WPID = ?) LIMIT 3", (x[1], x[0], x[2])))
if len(results) != 2:
    # do something
于 2013-10-03T10:31:06.117 回答