【问题标题】:fetchone vs fetchone[0] in python sqlite3python sqlite3中的fetchone vs fetchone [0]
【发布时间】:2021-10-23 05:40:22
【问题描述】:

我有一个类似下面的函数来从 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(无记录)异常。

【问题讨论】:

    标签: python sqlite exception sqliteexception


    【解决方案1】:

    来自doc

    fetchone()

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

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

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

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

    【讨论】:

    • 谢谢!后来我用 try: 处理了这个问题,除了 TypeError。但是您在这里给出的建议很简单,而且效果很好。
    猜你喜欢
    • 1970-01-01
    • 2018-03-10
    • 2021-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-31
    相关资源
    最近更新 更多