我正在学习 Python 并发现了一个难以解释的行为: 使用 sqlite3 模块,我在现有的 SQLite 表上执行 SQL 查询以获取值。如果 SQL WHERE 子句中的条件为真,我期待一个真实值,如果条件为假,我正在使用 COALESCE 处理这种情况,并希望返回默认值(在我的情况下为“-1”)。 但是,根据下面的代码示例,fetchone() 返回一个 None 对象,直到我在所选列上应用聚合函数(在我的例子中是 MAX())。
result = cur.execute('''SELECT coalesce(pin, '-1') inaccuracies
FROM card where number = 'some_incorrect_number' ''').fetchone()
print(result)
# None -- WHY NONE?
result = cur.execute('''SELECT coalesce(max(pin), '-1')
FROM card where number = 'some_incorrect_number' ''').fetchone()
print(result)
# ('-1',) -- A CORRECT RESULT
您能解释一下为什么 MAX() 解决了这个问题并且我得到了所需的结果,而没有 MAX() 我得到的是 None 吗?
抱歉,如果问题中存在一些不准确之处。谢谢!
最佳答案
这个查询:
SELECT coalesce(pin, '-1') inaccuracies FROM card where number = 'some_incorrect_number'
如果表格的任何行不满足 WHERE 子句中的条件,则返回空结果(无行),这是预期的行为。
但是,当您使用聚合函数时,例如 MAX()
、MIN()
、COUNT()
、SUM()
、AVG()
或 GROUP_CONCAT()
查询总是返回 1 行 null
作为函数的结果(或 0
在 COUNT()
的情况下)如果没有找到匹配项(对于 WHERE
子句的条件)或者即使没有行在表中。
关于python-3.x - sqlite3 fetchone() 返回 None 或其他值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65435723/