Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

parameter unsupported when inserting int in sqlite

I have been going around and around with storing date and time in SQLite3 with the intention of retrieving the records using comparisons later e.g. SELECT * WHERE date1 < date2

I finally gave up trying to store datetime.datetime objects and decided to use a UNIX timestamp instead as they are just an int and easy to manipulate but I am still getting errors.

import sqlite3 as lite import datetime import time  conn = lite.connect('dispatcher.db') cur = conn.cursor() query = "create table if not exists new_test (curent_dt)" cur.execute(query) conn.commit() now = datetime.datetime.now() - datetime.timedelta(minutes=60) temp = int(time.mktime(now.timetuple())) cur.execute('insert into new_test (curent_dt) values (? )', (temp)) conn.commit() conn.close() 

returns the following error:

cur.execute('insert into new_test (curent_dt) values (? )', (temp)) ValueError: parameters are of unsupported type

After investigating the problem a little further I found that you have to use a trailing comma to create a single element tuple e.g. (temp,)

like image 404
Tim McDonald Avatar asked Aug 07 '12 19:08

Tim McDonald


1 Answers

Note the added comma after "temp" below:

cur.execute('insert into new_test (curent_dt) values (?)', (temp,)) 

The reason this happens is that (temp) is an integer but (temp,) is a tuple of length one containing temp.

like image 73
Alex Flint Avatar answered Sep 19 '22 22:09

Alex Flint