Comment insérer current_timestamp dans Postgres via python
J'ai besoin d'insérer des lignes dans PG l'un des champs est la date et l'heure avec l'heure, c'est le moment de l'incident, donc je ne peux pas utiliser --> current_timestamp fonction de Postgres au moment de l'insertion, alors comment puis-je insérer l'heure et la date que j'ai ramassée avant, pg ligne dans le même format qu'il aurait été créé par current_timestamp à ce point dans le temps.
Vous devez vous connecter pour publier un commentaire.
Un timestamp n'a pas de "format".
La méthode recommandée pour traiter les horodatages est d'utiliser un PreparedStatement où vous venez de passer d'un espace réservé dans le SQL et passer pour un "vrai" objet à travers l'API de votre langage de programmation. Comme je ne connais pas Python, je ne sais pas si elle prend en charge PreparedStatements et comment la syntaxe pour les qui serait.
Si vous souhaitez mettre un timestamp littérale dans votre SQL généré, vous devrez suivre certaines règles de mise en forme lors de la spécification de la valeur (un littéral n'ont un format).
Ivan méthode de travail, même si je ne suis pas sûr à 100% si elle dépend de la configuration du serveur PostgreSQL.
Une configuration (et la langue) solution indépendante pour spécifier un timestamp littérale est la norme SQL ANSI:
Oui, c'est le mot-clé
TIMESTAMP
suivie par un timestamp formaté en ISO style (leTIMESTAMP
mot clé qui définit le format)L'autre solution serait d'utiliser la
to_timestamp()
fonction où vous pouvez spécifier le format de l'entrée littérale.Si vous utilisez
psycopg2
(et peut-être quelques autres de la bibliothèque du client), vous pouvez tout simplement passer un Pythondatetime
objet comme un paramètre SQL-query:Plus Python les types qui peuvent être adaptées en SQL (et de les retourner comme des objets Python lorsqu'une requête est exécutée) sont répertoriés ici.
datetime.now(timezone.utc)
et assurez-vous que "timestamp avec le fuseau horaire" est utilisé sur la db côté.datetime.utcnow()
Suffit d'utiliser le "maintenant"
http://www.postgresql.org/docs/8.0/static/datatype-datetime.html
now
est exactement le même quecurrent_timestamp
En d'autres mots: il suffit d'écrire n'importe quoi et il va fonctionner.
Ou vérifier ce tableau avec tous les sans ambiguïté formats.
Sûr, il suffit de passer une chaîne de valeur pour cette colonne timestamp au format:
'2011-05-16 15:36:38'
(vous pouvez également ajouter un fuseau horaire, comme'PST'
). PostgreSQL sera automatiquement convertir la chaîne de caractères à un horodatage. Voir http://www.postgresql.org/docs/9.0/static/datatype-datetime.html#DATATYPE-DATETIME-INPUTensuite l'utiliser dans votre code:
Suffit d'utiliser
ou
Je préfère celui-ci que je n'aime pas parenthèse supplémentaire, mais c'est juste une préférence personnelle.