J'ai une colonne de date dans une table MySQL. Je souhaite insérer un datetime.datetime()
objet dans cette colonne. Que dois-je utiliser dans l'instruction d'exécution?
J'ai essayé:
now = datetime.datetime(2009,5,5)
cursor.execute("INSERT INTO table
(name, id, datecolumn) VALUES (%s, %s
, %s)",("name", 4,now))
J'obtiens une erreur comme: "TypeError: not all arguments converted during string formatting"
Que dois-je utiliser à la place de %s
?
%s
cursor.execute("INSERT INTO table (name, id, datecolumn) VALUES (%s, %s , '%s')",("name", 4,now))
Réponses:
Pour un champ de temps, utilisez:
Je pense que strftime s'applique également à datetime.
la source
time
cet exemple?Vous obtenez probablement l'erreur TypeError car vous avez besoin de guillemets autour de la valeur de la colonne de données.
Essayer:
En ce qui concerne le format, j'ai eu du succès avec la commande ci-dessus (qui comprend les millisecondes) et avec:
J'espère que cela t'aides.
la source
%s
depymsql
.Essayez d'utiliser
now.date()
pour obtenir unDate
objet plutôt qu'un fichierDateTime
.Si cela ne fonctionne pas, la conversion en une chaîne devrait fonctionner:
la source
Utilisez la méthode Python
datetime.strftime(format)
, où format ='%Y-%m-%d %H:%M:%S'
.Fuseaux horaires
Si les fuseaux horaires sont un problème, le fuseau horaire MySQL peut être défini pour UTC comme suit:
Et le fuseau horaire peut être défini en Python:
Documentation MySQL
la source
À quelle base de données vous connectez-vous? Je sais qu'Oracle peut être pointilleux sur les formats de date et aime le format ISO 8601 .
** Remarque: Oups, je viens de lire que vous êtes sur MySQL. Formatez simplement la date et essayez-la comme un appel SQL direct distinct à tester.
En Python, vous pouvez obtenir une date ISO comme
Par exemple, Oracle aime les dates comme
En fonction de votre base de données, s'il s'agit d'Oracle, vous devrez peut-être TO_DATE:
L'utilisation générale de TO_DATE est:
Si vous utilisez une autre base de données (j'ai vu le curseur et j'ai pensé à Oracle; je peux me tromper), vérifiez leurs outils de format de date. Pour MySQL c'est DATE_FORMAT () et SQL Server c'est CONVERT.
L'utilisation d'un outil comme SQLAlchemy supprimera également de telles différences et vous facilitera la vie.
la source
Si vous utilisez simplement un datetime.date python (pas un datetime.datetime complet), convertissez simplement la date sous forme de chaîne. C'est très simple et fonctionne pour moi (mysql, python 2.7, Ubuntu). La colonne
published_date
est un champ de date MySQL, la variable pythonpublish_date
estdatetime.date
.la source
lors de l'insertion dans t-sql
cela échoue:
cela marche:
moyen facile:
la source