[英]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.