parámetro no admitido al insertar int en sqlite

He estado dando vueltas y vueltas con el almacenamiento de la fecha y la hora en SQLite3 con la intención de recuperar los registros mediante comparaciones posteriores, por ejemplo, SELECT * WHERE date1 < date2

Finalmente, dejé de intentar almacenar objetos datetime.datetime y decidí usar una marca de tiempo UNIX, ya que son solo un int y fáciles de manipular, pero aún estoy recibiendo errores.

 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() 

devuelve el siguiente error:

cur.execute (‘insertar en new_test (curent_dt) valores (?)’, (temp)) ValueError: los parámetros son de tipo no compatible

Después de investigar el problema un poco más, descubrí que tienes que usar una coma al final para crear una tupla de un solo elemento, por ejemplo (temp,)

Note la coma agregada después de “temp” a continuación:

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

La razón por la que esto sucede es que (temp) es un entero, pero (temp,) es una tupla de longitud que contiene temp .

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

Reemplace este código con

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

En Python, (temp) y (temp,) son dos cosas diferentes. (temp) es solo una variable normal como un entero, pero (temp,) es una tupla. La tupla solo se toma al proporcionar comas después de cada elemento y el método execute () toma solo las tuplas en su segundo parámetro.

cambiando esa linea con esto

  cur.execute ('insertar en new_test (curent_dt) valores (?)', str (temp))