Requete sql contenant une variable date
Bonjour,
je veux exécuter cette requête en python qui me donne des résultats selon la date d'hier, si je fais directement la date ça s’exécute , mais avec la variable non:
before_one_days = date_today - no_of_days
print("Before Four Days:", before_one_days)
try:
connection = psycopg2.connect(database="testbd", user="postgres", host="localhost",
password="admin", port="5432")
cursor = connection.cursor()
cursor.execute("SELECT * FROM datafwi where datefwi='+before_one_days +'")
Merci pour votre aide
je veux exécuter cette requête en python qui me donne des résultats selon la date d'hier, si je fais directement la date ça s’exécute , mais avec la variable non:
before_one_days = date_today - no_of_days
print("Before Four Days:", before_one_days)
try:
connection = psycopg2.connect(database="testbd", user="postgres", host="localhost",
password="admin", port="5432")
cursor = connection.cursor()
cursor.execute("SELECT * FROM datafwi where datefwi='+before_one_days +'")
Merci pour votre aide
6 réponses
-
Bonjour,
Que vaut before_one_days ?
Si le format de la date est bon, es-tu certain que dans ta table il y a au moins une ligne avec la colonne datefwi à cette date ? -
before_one_days veut dire la date systéme-1 ça veut dire la date d'hier.
je pense que le problème vint de l’écriture de la variable dans la requête -
quand je met SELECT * FROM datafwi where datefwi='2020-01-01'c'est bon
mais quand je mets la variable:
Voici ce que ça donne comme erreur
Error while fetching data from PostgreSQL ERREUR: syntaxe en entrée invalide pour le type date : « +before_one_days + »
LINE 1: SELECT * FROM datafwi where datefwi='+before_one_days +' -
j'écris comment la requête
cursor.execute("SELECT * FROM datafwi where datefwi='+before_one_days +'")??? -
ok je suis desolée voici ce que ça donne leprint("SELECT * FROM datafwi where datefwi='+before_one_days +'")
Error while fetching data from PostgreSQL ERREUR: la colonne « before_one_days » n'existe pas
LINE 1: SELECT * FROM datafwi where datefwi=before_one_days-
Bonjour,
J'ai essayé au maximum de te faire comprendre ce qu'il se passe, mais manifestement tu as du mal ^^
Pourtant tu vois bien que ton sql n'est pas bon.
LINE 1: SELECT * FROM datafwi where datefwi=before_one_days
Cela signifie que postgresql cherche à tester une égalité entre ta colonne datefwi et une colonne before_one_days qui n'existe pas dans ta table.
On peut donc conclure que ta concaténation n'est pas bonne.
Alors on corrige.
cursor.execute("SELECT * FROM datafwi where datefwi='" +before_one_days + "'")
Et pour éviter ce genre de désagrément, on préfère utiliser format.
cursor.execute("SELECT * FROM datafwi where datefwi='{}'".format(before_one_days))
Mais comme je t'ai signalé, execute peut prendre des valeurs à passer à la requête, il est plus que préférable d'utiliser cela.
http://initd.org/psycopg/docs/usage.html#passing-parameters-to-sql-queries
Qui donnerait donc pour toi.
cursor.execute("SELECT * FROM datafwi where datefwi=%", (before_one_days,))
Cette syntaxe est à privilégier absolument.
-
-
Merci beaucoup ça a marché , desolée encore une fois.