python-3.x - sqlite3 fetchone() 返回 None 或其他值

标签 python-3.x sqlite aggregate-functions

我正在学习 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 作为函数的结果(或 0COUNT() 的情况下)如果没有找到匹配项(对于 WHERE 子句的条件)或者即使没有行在表中。

关于python-3.x - sqlite3 fetchone() 返回 None 或其他值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65435723/

相关文章:

python-3.x - RAM 在 google colab 中崩溃

ios - SQLITE : Segmentation Fault 11 on upgrading to Xcode 7

sql - 在PostgreSQL的同一查询中如何使用两个SUM()聚合函数?

sql - 组合排序

python-3.x - 随机样本集,用于根据标签创建交叉验证和训练集

python - (Python) 使用 UTF-8 编码将字符串写入 CSV

java - SQLiteOpenHelper 方法应该接受对象或 ID 吗?

MYSQL通过选择要显示的元素来加入排序和分组

python - BeautifulSoup - 将多个 <tr> 元素合并到一个列表中

perl - 使用 Perl 缓存模块缓存 SQLite 表