Home > Enterprise >  fetchone vs fetchone[0] in python sqlite3
fetchone vs fetchone[0] in python sqlite3

Time:10-25

I have a function like the below to get data from 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")

For the combination of "crop" and "disease", there will only be one record or none. The above function works fine when I give fetchone()[0], but does not work when I give only fetchone() without [0].

Also please advise how to handle the NoneType (no record) exception here.

CodePudding user response:

From the doc:

fetchone()

Fetches the next row of a query result set, returning a single sequence, or None when no more data is available.

The return value is a tuple, so remedy will be found at the first element, i.e. fetchone()[0]. In the case where the query returns None, there is no 0th element, so program will give a TypeError.

One solution would be to use fetchone() and make sure it has returned a row before accessing the index. E.G.

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