Requete sql contenant une variable date

Fermé
ami2284 Messages postés 8 Date d'inscription mardi 17 décembre 2019 Statut Membre Dernière intervention 27 mars 2020 - Modifié le 2 janv. 2020 à 16:04
ami2284 Messages postés 8 Date d'inscription mardi 17 décembre 2019 Statut Membre Dernière intervention 27 mars 2020 - 3 janv. 2020 à 15:55
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 ?
0
ami2284 Messages postés 8 Date d'inscription mardi 17 décembre 2019 Statut Membre Dernière intervention 27 mars 2020
2 janv. 2020 à 16:29
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
0
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).
0
ami2284 Messages postés 8 Date d'inscription mardi 17 décembre 2019 Statut Membre Dernière intervention 27 mars 2020
Modifié le 2 janv. 2020 à 17:06
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 +'
0
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.
0
ami2284 Messages postés 8 Date d'inscription mardi 17 décembre 2019 Statut Membre Dernière intervention 27 mars 2020
2 janv. 2020 à 17:57
j'écris comment la requête

cursor.execute("SELECT * FROM datafwi where datefwi='+before_one_days +'")???
0
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ami2284 Messages postés 8 Date d'inscription mardi 17 décembre 2019 Statut Membre Dernière intervention 27 mars 2020
3 janv. 2020 à 12:20
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
0
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.
0
ami2284 Messages postés 8 Date d'inscription mardi 17 décembre 2019 Statut Membre Dernière intervention 27 mars 2020
3 janv. 2020 à 15:55
Merci beaucoup ça a marché , desolée encore une fois.
0