python sqlite3 中的 fetchone 与 fetchone[0]

fetchone vs fetchone[0] in python sqlite3

我有一个类似下面的函数来从 SQLite3 获取数据 table。

def remedysql(crop, disease):
    try:
        conn = sqlite3.connect('plant_protection.db')
        mycur = conn.cursor()
        sql=f'select remedy from pp_remedy WHERE crop="{crop}" and disease="{disease}"'
        #remedy = mycur.execute(sql).fetchone()[0]
        mycur.execute(sql)
        remedy = mycur.fetchone()[0]
        return remedy
    except sqlite3.Error as error:
        print("Error while connecting to sqlite plantprot DB")

对于“作物”和“疾病”的组合,将只有一条记录或none。当我给出 fetchone()[0] 时,上面的函数工作正常,但是当我只给出 fetchone() 而没有 [0].

时,上面的函数不起作用

另请告知如何处理NoneType(无记录)异常。

来自doc

fetchone()

Fetches the next row of a query result set, returning a single sequence, or None when no more data is available.

return 值是一个元组,因此 remedy 将在第一个元素处找到,即 fetchone()[0]。在查询 returns None 的情况下,没有第 0 个元素,因此程序将给出 TypeError.

一种解决方案是使用 fetchone() 并确保它在访问索引之前已经 return 编辑了一行。例如

remedy = mycur.fetchone()
if remedy:
    return remedy[0]
else:
    return None