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