Подтвердить что ты не робот

Параметр не поддерживается при вставке int в sqlite

Я собираюсь вокруг и вокруг с хранением даты и времени в SQLite3 с целью получения записей с использованием сравнений позже, например. SELECT * WHERE date1 < date2

Я, наконец, отказался от попытки сохранить объекты datetime.datetime и решил использовать временную метку UNIX, поскольку они просто int и легко манипулировать, но я все еще получаю ошибки.

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

возвращает следующую ошибку:

cur.execute('insert into new_test (curent_dt) значения (?)', (temp))     ValueError: параметры неподдерживаемого типа

После изучения проблемы немного дальше я обнаружил, что вам нужно использовать конечную запятую для создания одного элемента кортежа, например. (temp,)

4b9b3361

Ответ 1

Обратите внимание на добавленную запятую после "temp" ниже:

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

Причина этого в том, что (temp) является целым числом, но (temp,) является кортежем длиной один, содержащим temp.

Ответ 2

меняя эту строку с этим

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