Reputation: 137
I want to build a function that returns the lowest row count from all tables if the two scores scor1
and scor2
are not both 0 :
def mini(tablelist):
mini = 1000
for table in tablelist:
c.execute("SELECT numar_par FROM " + table + "")
c_min = len(c.fetchall())
if c_min is None:
mini = 0
else:
c.execute("SELECT scor1 FROM " + table + " ORDER BY numar_par DESC LIMIT 1")
print("this is fetchone:",c.fetchone(),'from table: ',table)
scor1 = c.fetchone()[0]
c.execute("SELECT scor2 FROM " + table + " ORDER BY numar_par DESC LIMIT 1")
scor2 = c.fetchone()[0]
sum = int(scor1) + int(scor2)
if c_min < mini and sum >0:
mini = c_min
return mini
This is the result of the print statement:
this is fetchone: ('0',) from table: a
and this is the error:
File "D:\pariuri\python\Pycharm test1\Test11 peste 0.5\functii.py", line 181, in mini
scor1 = c.fetchone()[0]
TypeError: 'NoneType' object is not subscriptable
Upvotes: 1
Views: 1368
Reputation: 402393
After executing a query with execute
, the query results will be available in a query result set, which you can then iterate over with the c.fetch*
methods.
The thing to note here, is that fetch*
will iterate over the result set, exhausting it. This works similar to a generator, which you can only iterate over once.
It works something like this. Imagine a pointer pointing to the next row in the result set to be queried. Running c.execute
gives a result set looking like this -
head
|____ Result 1
Result 2
.
.
Result N
After calling c.fetchone
, head
will return the next row, and advance by one row -
head Result 1 (returned)
|____ Result 2
.
.
Result N
Since you have only one row in your table, another call to fetchone
returns an empty list.
Upvotes: 4