J'essaie d'insérer une valeur datetime dans ma base de données postgres en utilisant Psycopg2.Passage d'un datetime dans psycopg2
Mon code fonctionnait avant, mais je suis passé de la notation% s à la notation {}, et mon code s'est cassé.
ici est mon code
for j in eveLists.itemList:
tempPrice = fetchSellPrice(i, j)
database_name = eveLists.DatabaseDict[i]
now = datetime.datetime.utcnow()
cur.execute("INSERT INTO {0} VALUES ({1}, {2}, {3}, NULL, {4}, {5}, NULL);".format(
database_name,
str(i),
str(j),
float(tempPrice),
datetime.date.today(),
now))
Je reçois l'erreur suivante:
psycopg2.ProgrammingError: syntax error at or near "00"
LINE 1: ...0000142, 2268, 3.11, NULL, 2017-05-09, 2017-05-10 00:40:03.3...
^
Il est le traitement de la date et l'heure que deux objets distincts.
J'ai essayé plusieurs manières différentes qui sont commentées et toutes lancent divers messages d'erreur. J'ai essayé envelopper le datetime entre guillemets,
now = ("'%s'") % str(datetime.datetime.utcnow())
qui donnent une erreur
psycopg2.ProgrammingError: column "mydate" is of type date but expression is of type integer
LINE 1: ...NTO temp_jita VALUES (30000142, 2268, 3.11, NULL, 2017-05-09...
^
HINT: You will need to rewrite or cast the expression.
Il pense ma date est un entier, même si j'enveloppai entre guillemets.
J'ai également essayé de faire un horodatage psycopg2 manuellement:
now = psycopg2.Timestamp(now.strftime("%Y"),
now.strftime("%m"),
now.strftime("%d"),
now.strftime("%h"),
now.strftime("%M"),
int(now.strftime("%-S")))
Ce qui donne l'erreur suivante:
int(now.strftime("%-S")))
TypeError: an integer is required (got type str)
Je ne sais pas comment il pense que cela est une chaîne, d'autant plus que je jette-le comme un int!
Toute aide serait appréciée.
EDIT: La raison pour laquelle je suis passé les variables à l'aide {} notation et non notation s% est parce que je reçu une erreur pour le code suivant:
for j in eveLists.itemList:
tempPrice = fetchSellPrice(i, j)
database_name = eveLists.DatabaseDict[i]
now = datetime.datetime.utcnow()
now = str(now)
cur.execute("INSERT INTO %s VALUES (%s, %s, %s, NULL, %s, %s, NULL);", [database_name,
str(i),
str(j),
float(tempPrice),
datetime.date.today(),
now
])
psycopg2.ProgrammingError: syntax error at or near "'temp_jita'"
LINE 1: INSERT INTO 'temp_jita' VALUES ('30000142', '2268', 3.03, NU...
^
S'il vous plaît se référer à mon article précédent sur le sujet: How to remove the quotes from a string for SQL query in Python?
EDIT: suivant les conseils de » @Zorg de ce lien (http://initd.org/psycopg/docs/sql.html), ce code a fonctionné pour moi:
cur.execute(sql.SQL("INSERT INTO {} VALUES (%s, %s, %s, NULL, %s, %s, NULL);").format(sql.Identifier(database_name)),[
str(i),
str(j),
float(tempPrice),
datetime.date.today(),
now
])
Quels types sont ces colonnes dans la DB? Et ce post est déroutant parce que dans un cas l'erreur est pour le champ 4, et dans un autre cas c'est pour le champ 5? –
et si vous venez d'insérer des dates à 'str (now)'? .. –
si vous l'enveloppez comme str (maintenant) vous obtenez la première erreur à l'heure. –