0

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

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")

对于“作物”和“疾病”的组合,将只有一个记录或没有记录。上面的功能在我给予时工作正常,但在我只给予fetchone()[0]时不起作用。fetchone()[0]

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

4

1 回答 1

0

文档

获取一个()

获取查询结果集的下一行,返回单个序列,或者None当没有更多数据可用时。

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

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

remedy = mycur.fetchone()
if remedy:
    return remedy[0]
else:
    return None
于 2021-10-23T10:45:54.577 回答