繁体   English   中英

python sqlite3中的fetchone vs fetchone[0]

[英]fetchone vs fetchone[0] in python sqlite3

我有一个类似下面的函数来从 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]fetchone()

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

文档

fetchone()

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM