Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Interfaçage autre langage Python Discussion :

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


Sujet :

Interfaçage autre langage Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    février 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : février 2013
    Messages : 9
    Points : 6
    Points
    6
    Par défaut PostgreSQL - ERREUR: la relation « nom_table » n'existe pas
    Bonjour à tous,


    Je débute en postgresSQL et en Python. J'espère être au bon endroit sur le forum et également pour trouver du support
    Je voudrais savoir pourquoi j'obtiens l'erreur suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    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 mais que les chevronés python pourront certainement me renseigner.


    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 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    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


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
     
    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:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
     
    "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:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    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.

  2. #2
    Modérateur

    Homme Profil pro
    Architecte technique
    Inscrit en
    juin 2008
    Messages
    14 476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 14 476
    Points : 24 494
    Points
    24 494
    Par défaut
    Salut,

    Vous dites que l'accès à la table "test" retourne une erreur alors que vous postez un code et une sortie qui montre le contraire.

    De toutes façons, c'est pas Python ou PgAdmin qui répondent aux requêtes mais le serveur du SGDB, donc s'il n'y a pas de table "test", c'est qu'elle n'existe pas pour ce serveur là et cette base de données là.
    Et si vous vous êtes trompé quelque part, c'est dans les chaînes de caractères correspondantes. Manque de rigueur? Submergé par le tas d'informations à digérer parce que vous voulez aller trop vite?
    En tous cas, on ne va pas l'inventer d'autant que vous ne montrez pas le code qui ne fonctionne pas (mais un code qui marche).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    février 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : février 2013
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Bonjour Wiztricks,

    Merci pour ta réponse rapide, et oui, peut-être que j'essaye d'aller trop vite, mais j'ai la contrainte du temps

    au passage, j'ai présenté tout le code, il faut juste scroller (ligne 42 à 77), c'est en dessous:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
     
     
    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


    Après redémarrage de mon poste, effectivement la table 'test' n'existe pas. Pourtant, avant, j'étais convaincu de l'avoir créé...
    Du coup,


    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 à la table 'T_employes' de la même base de données, avec la syntaxe suivante:

    Select * from T_employes

    et si je met les guillemets, select * from "T_employes" , je n'ai plus d'erreur.

    J'en conclus que le souci provient des guillemets... obligatoires qd on utilise le symbole '_' (underscore) sur les noms de tables, est-ce correct?
    ---
    Reste donc, l'exécution de cette requête depuis Python :
    Avec le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    ###########################################################
    ################ 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:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    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

  4. #4
    Modérateur

    Homme Profil pro
    Architecte technique
    Inscrit en
    juin 2008
    Messages
    14 476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 14 476
    Points : 24 494
    Points
    24 494
    Par défaut
    Salut,

    Citation Envoyé par revealmap Voir le message
    une aide sur cet aspect serait la buienvenue.
    Certes mais c'est toujours le même soucis: qui râle? Le serveur de la base de données.
    Et c'est documenté.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    février 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : février 2013
    Messages : 9
    Points : 6
    Points
    6
    Par défaut [RESOLU] : 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"').

    Donc, encore merci wiztricks.

+ Répondre à la discussion
Cette discussion est résolue.

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo