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

Popular posts from this blog

c# - How Configure Devart dotConnect for SQLite Code First? -

java - Copying object fields -

c++ - Clear the memory after returning a vector in a function -