paramètre non pris en charge lors de l'insertion d'un int dans sqlite

J'ai été autour de stockage de la date et de l'heure dans SQLite3 avec l'intention de récupérer les enregistrements à l'aide de comparaisons plus tard, par exemple SELECT * WHERE date1 < date2

J'ai finalement renoncé à essayer de magasin de type datetime.datetime des objets et a décidé d'utiliser un timestamp UNIX, au lieu qu'ils sont juste un int et facile à manipuler, mais j'ai toujours des erreurs.

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

renvoie l'erreur suivante:

cur.execute('insert into new_test (curent_dt) values (? )', (temp))
ValueError: les paramètres sont de type non pris en charge

Après avoir enquêté sur le problème un peu, j'ai trouvé que vous avez à utiliser une virgule pour créer un seul élément d'un tuple par exemple (temp,)

  • Double Possible de Python tuple virgule règle de syntaxe
  • Mais c'est la réponse à la question, je ne vois pas la duplication. Même solution != même question.
  • Je pense que dans ce genre de cas, il est préférable de dupe. Sinon, on pourrait demander à une infinité de questions, une pour chaque API, qui s'attend à un n-uplet, et générer de l'infini question rep. Pas trop grave même si bien sûr 😉
InformationsquelleAutor Tim McDonald | 2012-08-07