sql - Python - None returned by using cursor.fetchone() -
internet searches have told me use cursor.fetchone() way particular row sql database in python. when use it, none. i'm pretty sure there stuff in there, i'm confused why happening. here code
db = sqlite3.connect('dataset.db') curs = db.cursor() curs.execute("create table data(id integer primary key, dataobj real)") def adddata(info): curs.execute('''insert data(dataobj) values (?)''', (info, )) def write(dataholder): #to put row vals table x in range(0, len(dataholder)): adddata(dataholder[x]) db.commit() def read(x): sqlquery = "select dataobj data id = ?" result = curs.execute(sqlquery, (x, )).fetchone() #should return row data table print result #returns none dataholder = [0.1, 0.2, 0.3, 0.4, 0.5] write(dataholder) x in range(0, len(dataholder)): read(dataholder[x + 1])
i'm using can save work on program , resume when restart it. feel i'm doing dumb, sorry if it's easy.
you know this, if have integer primary key
in table creation statement, column have integer values starting 1 , automatically incrementing (unless override explicit value) whenever insert row. table looks this:
id | dataobj ---+--------- 1 | 0.1 2 | 0.2 3 | 0.3 4 | 0.4 5 | 0.5
so wrong:
for x in range(0, len(dataholder)): read(dataholder[x + 1])
as iterate, x
takes value of 0
, 1
, 2
, 3
, 4
. , dataholder[x + 1]
, argument passed read()
, 0.2
, 0.3
, 0.4
, 0.5
first 4 iterations (the 5th indexerror
). means select statement selecting id = 0.1
, etc. , have no such id.
it should be
for x in range(len(dataholder)): # btw, don't need 0 read(x + 1)
(even if don't use debugger, errors can detected inserting few print
code. e.g. if had print(x)
in read
, you'd know id isn't think is.)
Comments
Post a Comment