PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 30/11/2018 20:25:51

revealmap
Membre

PostgreSQL - ERREUR: la relation « nom_table » n'existe pas

Bonjour à tous,


Je débute en postgresSQL et en Python.
Je voudrais savoir pourquoi j'obtiens l'erreur suivante:

Connexion établie avec succès vers Base de données 2: basedonnées2
Traceback (most recent call last):
  File "C:/Users/.../PycharmProjects/.../database_sqlsrv.py", line 62, in <module>
    cursor2.execute(req2)
psycopg2.ProgrammingError: ERREUR:  la relation « test » n'existe pas
LINE 1: SELECT * from test
                      ^


Process finished with exit code 1

Je poste ici parceque je pense qu'il s'agit d'une erreur Postgresql et non Python.


Voici mon environnement:
OS Windows 8
PostgreSQL 9.5.8
Pgadmin 3
Python 3.7.1 et PyCharm 2018.3
+ Psycopg2 pour Interconnexion de Python et PostgreSQL

Donc,
Je tente d'établir deux connexions distinctes (avec des paramètres distincts mais exactement le même code) sur deux bases de données du même serveur depuis Python (en utilisant Pycharm)  via le script ci-dessous.
L'une des connexions s'établie sans souci, mais l'autre non.

le message d'erreur indique :

psycopg2.ProgrammingError: ERREUR:  la relation « test » n'existe pas
LINE 1: SELECT * from test

Le fait est qie j'obtien exactement le même message d'erreur avec pgAdmin 3, si je vais dans l'interpréteur SQL pour la BD à problème (sauf si j'utilise le créateur de requête graphique), et ce n'est pas le cas sur la VB qui ne pose pas de pb...

Voici le code Python


import psycopg2

###########################################################
################ CONNEXION A 1 ERE BD = OK      ###########
###########################################################
# Credentials 1:
Server_postgres = ("localhost")
Port = 5432
Login = 'openpg'
Password = 'Password123'
dbname = "basedonnée1"
TableTest1 = "djangotable"

# CONNEXION A LA BD 1
connect = psycopg2.connect(database=dbname, user=Login, password=Password)
if connect:
    cursor = connect.cursor()
    print(" \nConnexion établie avec succès vers Base de données 1 : ", dbname)

# Requete SQL
req = ('SELECT * from {}'.format(TableTest1))

# Exécution de la requête
cursor.execute(req)

# Sortie à l'écran
print(" ######   Résultat de la Requête 1 :     #######")
data = cursor.fetchall()
for entry in data:
    print(entry)

# Fermeture de la connexion
cursor.close()
connect.close

print("###############################################")
print("\n\n----------------------------------------------------")
print("\n\n")


###########################################################
################ CONNEXION A 2 EME BD = ECHEC   ###########
###########################################################
# Credentials 1:
Server_postgres = ("localhost")
Port2 = 5432
Login2 = 'openpg'
Password2 = 'Password123'
dbname2 = "basedonnée2"
TableTest2 = "test"

# CONNEXION A LA BD
connect2 = psycopg2.connect(database=dbname2, user=Login2, password=Password2)
if connect:
    cursor2 = connect2.cursor()
    print(" \nConnexion établie avec succès vers Base de données 2:", dbname2)

# Requete SQL
req2 = ('SELECT * from {}'.format(TableTest2))

# Exécution de la requête
cursor2.execute(req2)

# Sortie à l'écran
print(" ######   Résultat de la Requête 2 :     #######")
data2 = cursor2.fetchall()
for entry2 in data2:
    print(entry2)

print("###############################################")
print("\n\n----------------------------------------------------")
print("\n\n")

# Fermeture de la connexion
cursor2.close()
connect2.close

et voici le log sur la console Python:

"C:\....\venv\Scripts\python.exe" "C:/Users/.../PycharmProjects/.../database_postgresql.py"
 
Connexion établie avec succès vers Base de données 1 :  djangodb
 ######   Résultat de la Requête 1 :     #######
(1, 'Toto')
(2, 'Tata')
(3, 'Titi')
###############################################


----------------------------------------------------



 
Connexion établie avec succès vers Base de données 2: basedonnées2
Traceback (most recent call last):
  File "C:/Users/.../PycharmProjects/.../database_sqlsrv.py", line 62, in <module>
    cursor2.execute(req2)
psycopg2.ProgrammingError: ERREUR:  la relation « test » n'existe pas
LINE 1: SELECT * from test
                      ^


Process finished with exit code 1

sur postgressSQL (via pgAdmin 3) l'erreur apparait come suit:

ERREUR:  la relation « test » n'existe pas
LINE 1: select * from test
                      ^
********** Erreur **********

ERREUR: la relation « test » n'existe pas
État SQL :42P01
Caractère : 15

Merci pour votre aide.

Hors ligne

#2 01/12/2018 00:52:22

rjuju
Administrateur

Re : PostgreSQL - ERREUR: la relation « nom_table » n'existe pas

Je ne suis pas sur de comprendre.  La table test n'existe apparemment pas, du coup le message d'erreur semble normal.


Au passage:

connect2 = psycopg2.connect(database=dbname2, user=Login2, password=Password2)
if connect:
    cursor2 = connect2.cursor()

cela devrait être "if connect2"

Hors ligne

#3 01/12/2018 08:27:26

revealmap
Membre

Re : PostgreSQL - ERREUR: la relation « nom_table » n'existe pas

Bonjour rjuju,

Merci pour ta réponse rapide, et pour la petite correction.

Bon, actuellement, après redémarrage de mon pc et création de la table 'test', je n'ai plus l'erreur sur la table 'test'.
Par contre, j'obtiens de nouveau l'erreur si je t'ente d'accéder dans la même base de données à la table 'T_employes', avec la syntaxe suivante:

Select * from T_employes

et si je met les guillemets, select * from "T_employes" , je n'ai plus d'erreur. (Je pensais pourtant avoir effectué les mêmes test hier, avec échec.

J'en conclus que le souci provient des guillemets... obligatoires qd on utilise le symbole '_' sur les noms de tables.
---
Reste donc, l'exécution de cette requête depuis Python :
Avec le code suivant:

###########################################################
################ CONNEXION A 2 EME BD = ECHEC   ###########
###########################################################
# Credentials 1:
Server_postgres = ("localhost")
Port2 = 5432
Login2 = 'openpg'
Password2 = 'Password123'
dbname2 = "basedonnées2"
TableTest2 = "test"

# CONNEXION A LA BD
connect2 = psycopg2.connect(database=dbname2, user=Login2, password=Password2)
if connect2:
    cursor2 = connect2.cursor()
    print(" \nConnexion établie avec succès vers Base de données 2:", dbname2)

# Requete SQL
req2 = ('SELECT * from {}'.format(TableTest2))

# Exécution de la requête
cursor2.execute(req2)

# Sortie à l'écran
print(" ######   Résultat de la Requête 2 :     #######")
data2 = cursor2.fetchall()
for entry2 in data2:
    print(entry2)

print("###############################################")
print("\n\n----------------------------------------------------")
print("\n\n")

# Fermeture de la connexion
cursor2.close()
connect2.close

- Lorsque TableTest2 = "test" je n'ai pas d'erreur,
- Et, lorsque TableTest2 = "T_Employes" j'obtiens l'erreur:

 
Connexion établie avec succès vers Base de données 2: basedonnées2
Traceback (most recent call last):
  File "C:/Users/.../database_sqlsrv.py", line 62, in <module>
    cursor2.execute(req2)
psycopg2.ProgrammingError: ERREUR:  la relation « t_employes » n'existe pas
LINE 1: SELECT * from T_Employes
                      ^


Process finished with exit code 1

Je dois donc découvrir, je crois, comment forcer Python à renvoyer
"LINE 1: SELECT * from "T_Employes"" (avec les guillemets sur "T_employes" au lieu de "LINE 1: SELECT * from T_Employes".

une aide sur cet aspect serait la buienvenue.

merci à vous

Dernière modification par revealmap (01/12/2018 08:56:17)

Hors ligne

#4 01/12/2018 11:16:58

revealmap
Membre

Re : PostgreSQL - ERREUR: la relation « nom_table » n'existe pas

I get it!!

il fallait s'assurer que Python sorte bien "T_Employes" et non juste T_Employes, et cela est possible par la déclaration TableTest2 = ('"T_Employes"').
c'est documenté ici:

https://www.postgresql.org/docs/current … DENTIFIERS

Donc, merci.

Hors ligne

Pied de page des forums