Python检查SQLite3中是否存在

Cae*_*ius 7 sqlite exists python-3.x

我正在尝试检查SQLite3数据库中是否存在变量.不幸的是,我似乎无法让它工作.机场表包含3个列,其中ICAO作为第一列.

if c.execute("SELECT EXISTS(SELECT 1 FROM airports WHERE ICAO='EHAM')") is True:
    print("Found!")
else:
    print("Not found...")
Run Code Online (Sandbox Code Playgroud)

代码运行时没有任何错误,但结果始终相同(未找到).

这段代码有什么问题?

zer*_*323 9

试试这个:

c.execute("SELECT EXISTS(SELECT 1 FROM airports WHERE ICAO='EHAM')")

if c.fetchone():
    print("Found!")

else:
    print("Not found...")
Run Code Online (Sandbox Code Playgroud)

返回值cursor.execute是游标(或更准确地引用自身),并且与查询结果无关.您可以轻松检查:

 >>> r = c.execute("SELECT EXISTS(SELECT 1 FROM airports WHERE ICAO='EHAM')")
 >>> r is True
 False
 >>> r is False
 False
 >>> r is None
 False

 >>> r is c
 True
Run Code Online (Sandbox Code Playgroud)

另一方面,如果cursor.fetchone没有传递查询条件的行,则调用结果元组或无.所以在你的情况下if c.fetchone():意味着以下之一:

if (1, ):
    ...
Run Code Online (Sandbox Code Playgroud)

要么

if None:
    ...
Run Code Online (Sandbox Code Playgroud)

  • 这对我不起作用,因为 EXISTS 在 sqlite3 中返回 0 或 1。请参阅文档 (http://sqlite.org/lang_expr.html):“EXISTS 运算符始终计算为整数值 0 和 1 之一。如果执行指定为 EXISTS 运算符右侧操作数的 SELECT 语句,则会返回一行或多行,则 EXISTS 运算符的计算结果为 1。如果执行 SELECT 根本不会返回任何行,则 EXISTS 运算符的计算结果为 0。”因此您可以将答案从 `None` 更改为 (0,)。如果在接下来的几天内没有人反对,我将进行编辑。 (5认同)