PYMYSQL "fetchone() is None" 相当于fetchall()?

PYMYSQL "fetchone() is None" equivalent to fetchall()?

当用户输入ID修改销售时,我需要控制空记录。

这是诀窍,如果我用 cursor.fetchone() 而不是 cursor.fetchall(),条件 是 None 验证该行是空的,并告诉用户输入另一个 ID,但它似乎根本无法与 fetchall() 一起使用。

我必须使用 fetchall,否则我会开始遇到漂亮格式的问题。

consulta = "SELECT id, CAST(fecha AS CHAR), id_cliente, total FROM compra WHERE id = %s;"
                cursor.execute(consulta, (id))
                compra = cursor.fetchall()
                **if (compra is None):**
                    print("ID is not valid.\n")
                    exito = False
                    return
                else:
                    exito = True
                T.clear_rows()
                for x in compra:
                    T.add_row(x)
                clear()
                print(T)

提前致谢!

Python DB API 定义了 fetchall 到 return 某种序列,无论结果中有多少行。其中 fetchone returns None 如果没有找到行,fetchall returns 是一个空序列。如果您的特定图书馆 return 是一个列表,您可以轻松检查列表是否为空:

compra = cursor.fetchall()
if not compra:
    print("ID is not valid")
    return

如果它 return 是其他类型的惰性迭代器,您可能无法判断它是否为空而不至少尝试迭代它。您可能需要

compra = cursor.fetchall()
try:
    first = next(compra)
except StopIteration:
    print("ID is not valid.")
    return
T.clear_rows()
T.add_row(first)
for x in compra:
    T.add_row(x)

可能有一个更简单的解决方案,这取决于 T 是什么以及在确定 compra 是否为空之前调用 T.clear_rows() 是否安全。