Python和SQLite3:Query必须返回2个列表

2024-06-12 22:48:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用这个查询来验证两个航路点(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')]

如果航路点/路线组合为false,则返回None或one list。你知道吗

检查查询结果是否为双列表(或非双列表)的最常用方法是什么?你知道吗


Tags: orandfrom列表executewhere路线select
2条回答

也许最简单的方法是稍微修改SQL查询(应用LIMIT 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
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元组,其中的值表示wpnumer、route、first和second WPID。你知道吗

如果两个航路点不在同一路线上,c.fetchone()将返回None。你知道吗

相关问题 更多 >