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 😉
Vous devez vous connecter pour publier un commentaire.
Notez la virgule ajoutée après "temp" ci-dessous:
La raison à cela est que
(temp)
est un entier mais(temp,)
est un tuple de la longueur de l'un contenanttemp
.Remplacer ce code avec
En Python, (temp) et (temp) sont deux choses différentes. (temp) est juste une variable normale comme entier mais (temp) est un n-uplet. Tuple n'est pris en fournissant des virgules après chaque élément et de la méthode execute() ne prend que les tuples dans sa deuxième paramètre.
changer cette ligne avec ce