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
    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
    Expert éminent sénior
    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
    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
    Expert éminent sénior
    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
    [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.

###raw>template_hook.ano_emploi###