Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 8 sur 8
  1. #1
    Futur Membre du Club
    Profil pro Tulate Leke
    Inscrit en
    janvier 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Nom : Tulate Leke

    Informations forums :
    Inscription : janvier 2010
    Messages : 53
    Points : 15
    Points
    15

    Par défaut Conflit de clées étrangères

    Bonjour,

    Je dispose de 2 tables que voici
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    CREATE TABLE POSITION(
    NumeroChr VARCHAR(25),
    IdEnsembl VARCHAR(25),
    ...
    ...
    FOREIGN KEY (NumeroChr) REFERENCES CHROMOSOME(NumeroChr),
    FOREIGN KEY (IdEnsembl) REFERENCES GENE(IdEnsembl));
     
     
     
    CREATE TABLE CHROMOSOME(
    NumeroChr VARCHAR(25),
    Taille INT CHECK(Taille >= 0),
    PRIMARY KEY (NumeroChr));
    Voici mon problème, je commence par insérer mes données dans la table chromosome, cela ne pause aucun problème. Mais lorsque je tente de remplir ma table POSITION, j'obtiens le message d'erreur suivant :

    psycopg2.IintegrityError:insert or update on table "position" violate foreign key constraint "position_numeroChr_fkey"
    DETAIL: Key (numerochr) = ("X"') is not present in table "CHROMOSOME".
    Pourtant les chromosome (1,2,3... ect) sont bien implémentés dans la table position, le chromosome X est lui bel et bien présent dans la table CHROMOSOME, mais ne s'implémente pas la table POSITION, je ne comprends pas pourquoi, si vous avez une idée je suis preneur

  2. #2
    Expert Confirmé Sénior
    Homme Profil pro
    Inscrit en
    mai 2002
    Messages
    2 865
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : mai 2002
    Messages : 2 865
    Points : 4 649
    Points
    4 649

    Par défaut

    DETAIL: Key (numerochr) = ("X"') is not present in table "CHROMOSOME".
    Bonjour,

    Pour moi vous avez un problème de quote ou double quote (qui encadre le X)

  3. #3
    Futur Membre du Club
    Profil pro Tulate Leke
    Inscrit en
    janvier 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Nom : Tulate Leke

    Informations forums :
    Inscription : janvier 2010
    Messages : 53
    Points : 15
    Points
    15

    Par défaut

    Désolé j'ai recopié le message d'erreur à la main, le X est entouré uniquement de double quote:



  4. #4
    Expert Confirmé Sénior
    Homme Profil pro
    Inscrit en
    mai 2002
    Messages
    2 865
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : mai 2002
    Messages : 2 865
    Points : 4 649
    Points
    4 649

    Par défaut

    quel est votre requête d'insert ?
    Ceci devrait marcher sans problème, je reste sur ma 1ere pensée => problème avec des quote en trop

  5. #5
    Membre éprouvé Avatar de hariman
    Homme Profil pro Luc Hariman RANDRIANOMENJANAHARY
    Développeur Java, Android
    Inscrit en
    janvier 2008
    Messages
    199
    Détails du profil
    Informations personnelles :
    Nom : Homme Luc Hariman RANDRIANOMENJANAHARY
    Localisation : Ile Maurice

    Informations professionnelles :
    Activité : Développeur Java, Android
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : janvier 2008
    Messages : 199
    Points : 417
    Points
    417

    Par défaut

    Bonjour,

    Cette erreur survient quand on crée un enregistrement avec une valeur inexistante pour une clé etrangère.

    Vérifie si la table POSITION contient bien un enregistrement avec NumeroChr = "X".

  6. #6
    Futur Membre du Club
    Profil pro Tulate Leke
    Inscrit en
    janvier 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Nom : Tulate Leke

    Informations forums :
    Inscription : janvier 2010
    Messages : 53
    Points : 15
    Points
    15

    Par défaut

    Je ne suis pas au travail actuellement, je vous montrerai la requête en fin d'après midi.

    Vérifie si la table POSITION contient bien un enregistrement avec NumeroChr = "X".
    Justement c'est quand je veux insérer la valeur X avec un script dans ma table POSITION que je reçois ce message d'erreur, alors que les autres valeurs de humerochr s'implémentent correctement, et le type de numerochr est VARCHAR, cela devrait marcher :/

  7. #7
    Futur Membre du Club
    Profil pro Tulate Leke
    Inscrit en
    janvier 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Nom : Tulate Leke

    Informations forums :
    Inscription : janvier 2010
    Messages : 53
    Points : 15
    Points
    15

    Par défaut

    Voici mon script python permettant l'insertion (avec la requête d'insertion):







    Code :
    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
     
    #!/usr/bin/python
     
    # Import des modules python pour postgresql
    import psycopg2
    import psycopg2.extras
     
     
     
    # Programme de lecture du fichier biomart.txt 
    # de decoupage des informations pour les mettres dans la table Position
    # de notre base de donnees.
     
     
    # Programme Principal
    IF __name__ == '__main__':
     
        # Entrer le nom du schema de la base!
        schema = raw_input("Entrez le nom du schema de la base [public] : ")
        # Par defaut le nom du schema sera cours
        IF schema == "":                # l'utilisateur n'a rien rentre
            schema="public"     # alors schema=public par defaut
     
     
     
        geneFileName = raw_input("Entrez le nom du fichier contenant \
    la liste des genes [biomart.txt] : ")
     
        # Par defaut le nom du fichier a lire sera gene.txt
        IF geneFileName == "":          # l'utilisateur n'a rien rentre
            geneFileName="biomart.txt"     # alors genefilename=valeur par defaut
     
        print geneFileName
     
        # On ouvre le fichier que l'on veut lire!
        geneFile = open(geneFileName,"r")    # r indique lecture
     
        # Lecture d'un ligne dans le fichier des genes
        # Lecture de la premiere ligne avec les noms de colonnes
        ligne = geneFile.readline()
     
        # connection a la base de donnees pour permettre l'insertion des genes
        try:
            # Connecteur a la base de donnees
            connecteur = psycopg2.connect("dbname='ma_base' host='localhost' user='postgres' password='slivoide'")
            cur = connecteur.cursor(cursor_factory=psycopg2.extras.DictCursor)
     
        except Exception, e:
                print "<h1>Erreur lors de l'execute</h1>"
                print e.pgcode
                print e.pgerror
     
     
     
        # Lecture des lignes suivantes avec les informations sur les positions.
        FOR ligne IN geneFile.readlines():
            ligne = ligne.rstrip('\n') # on retire le dernier caractere (retour chariot)
     
            cols = ligne.split('	')    # Decoupage de la ligne pour recuperer les differents elements
            idensembl  = cols[0]       # Colonne 0 le nom du gene
            numerochr = cols[1]        # Colonne 1 le numero de chromosome
            debut = cols[2]     
            fin = cols[3]
    	sens = cols[7]
     
            #
            requetePosition = "insert into "+schema+".position (numerochr,idensembl,debut,fin,sens) values ('"+str(numerochr)+"','"+str(idensembl)+"','"+str(debut)+"','"+str(fin)+"','"+str(sens)+"')";
     
     
     
            # Maintenant on peut inserer les positions
            cur.execute(requetePosition)
           	connecteur.commit()
     
     
     
     
        geneFile.close();

  8. #8
    Expert Confirmé Sénior
    Homme Profil pro
    Inscrit en
    mai 2002
    Messages
    2 865
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : mai 2002
    Messages : 2 865
    Points : 4 649
    Points
    4 649

    Par défaut

    votre probleme releve du python (ou des données de votre fichier .txt) et non de pgsql. si vous faites cette insert à la main, via pgadmin par exemple, il marchera sans problème.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •