简体   繁体   中英

List index out of range for Python

I have a question regarding the following exercise:

def addstock():
        time = datetime.now().strftime("%B %d, %Y")
        hour = datetime.now().strftime("%I:%M%p")
        query = 'SELECT TotalStock FROM Stocks WHERE name = ? ORDER BY MovementID DESC LIMIT 1'
        parameters = (name.get(),)
        lastrecord = run_query(query, parameters)
        print(float(lastrecord.fetchall()[0][0]))
        print(float(quantity.get()))
        totalstock = (float(lastrecord.fetchall()[0][0])) + (float(quantity.get()))
        query = 'SELECT precio FROM product WHERE name = ?'
        precio = run_query(query, parameters)
        pricequant = precio.fetchall()[0]
        pricequantity = pricequant * quantities
        query = 'SELECT precio FROM product WHERE name = ?'
        parameters = (name.get(),)
        precio = run_query(query, parameters)
        priceforall = pricequant * totalstock

In this function, I print lastrecord.fetchall()[0][0] and quantity.get to make sure they are float. So the program prints in that case: 5.0 for lastrecord.fetchall and quantity.get

Up to now, no problem, but when I try to us them up, it gives me an error of List Index Out Of Range, so program do not find the value of lastrecord.fetchall()[0][0] which 2 lines before I was able to print successfully. Can someone explain why?

According to documentation :

The method fetches all (or all remaining) rows of a query result set and returns a list of tuples. If no more rows are available, it returns an empty list.

When you first time used lastrecord.fetchall()[0][0] all the records of lastrecord curser are fetched, so on the second call on totalstock = (float(lastrecord.fetchall()[0][0])) + (float(quantity.get())) there is no more rows left for the curser. If you want to reuse the fetched data, store it, then use it anytime you want, like this:

all_records = lastrecord.fetchall()
// ...
print(float(all_records[0][0]))
// ...
totalstock = (float(all_records[0][0])) + (float(quantity.get()))

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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