Requete sql contenant une variable date

Signaler
Messages postés
7
Date d'inscription
mardi 17 décembre 2019
Statut
Membre
Dernière intervention
3 janvier 2020
-
ami2284
Messages postés
7
Date d'inscription
mardi 17 décembre 2019
Statut
Membre
Dernière intervention
3 janvier 2020
-
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

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 ?
Messages postés
7
Date d'inscription
mardi 17 décembre 2019
Statut
Membre
Dernière intervention
3 janvier 2020

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
Dans ce cas affiche la valeur du select sql de ta requête, c'est quand même la 1ère chose à vérifier, print est l'outil de débogage numéro 1 de python (et pas que).
Messages postés
7
Date d'inscription
mardi 17 décembre 2019
Statut
Membre
Dernière intervention
3 janvier 2020

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 +'
Et donc que vaut le sql ?

print("SELECT * FROM datafwi where datefwi='+before_one_days +'")


En plus, on ne fait pas de concaténation pour insérer des valeurs dans une requête, mais on utilise les options fournies par le module qui se chargera de sécuriser le tout.
Messages postés
7
Date d'inscription
mardi 17 décembre 2019
Statut
Membre
Dernière intervention
3 janvier 2020

j'écris comment la requête

cursor.execute("SELECT * FROM datafwi where datefwi='+before_one_days +'")???
Désolé, j'abandonne, je vais pas te demander 50 fois ce que vaut un print de ton select, parce que le problème est là ! Ta variable before_one_days ne vaut pas ce que tu penses.
Messages postés
7
Date d'inscription
mardi 17 décembre 2019
Statut
Membre
Dernière intervention
3 janvier 2020

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.
Messages postés
7
Date d'inscription
mardi 17 décembre 2019
Statut
Membre
Dernière intervention
3 janvier 2020

Merci beaucoup ça a marché , desolée encore une fois.