sqlite3 fetchone() returns None 或其他值
sqlite3 fetchone() returns None or another value
我正在学习 Python 并发现了一个难以解释的行为:
使用 sqlite3 模块,我正在对现有 SQLite table 执行 SQL 查询以获取值。如果 SQL WHERE 子句中的条件为真,我期待一个真实值,如果条件为假,我正在使用 COALESCE 处理案例并希望 return 默认值('-1'在我的情况下)。
但是,根据下面的代码示例,fetchone() 是 returning 一个 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'
returns 如果 table 的任何行不满足 WHERE 子句中的条件并且这是预期的行为,则返回空结果(无行)。
但是,当您使用 MAX()
、MIN()
、COUNT()
、SUM()
、AVG()
或 GROUP_CONCAT()
等聚合函数时,查询如果未找到匹配项(对于 WHERE
子句)或者即使 table.
中没有行
我正在学习 Python 并发现了一个难以解释的行为: 使用 sqlite3 模块,我正在对现有 SQLite table 执行 SQL 查询以获取值。如果 SQL WHERE 子句中的条件为真,我期待一个真实值,如果条件为假,我正在使用 COALESCE 处理案例并希望 return 默认值('-1'在我的情况下)。 但是,根据下面的代码示例,fetchone() 是 returning 一个 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'
returns 如果 table 的任何行不满足 WHERE 子句中的条件并且这是预期的行为,则返回空结果(无行)。
但是,当您使用 MAX()
、MIN()
、COUNT()
、SUM()
、AVG()
或 GROUP_CONCAT()
等聚合函数时,查询如果未找到匹配项(对于 WHERE
子句)或者即使 table.