IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

PostgreSQL Discussion :

Insertion de données depuis Tkinter


Sujet :

PostgreSQL

  1. #1
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2011
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2011
    Messages : 88
    Par défaut Insertion de données depuis Tkinter
    Je voudrais inserer des données depuis une interface Tkinter dans une base de données Postgresql qui s'appele : "firstbase" qui contient une table : "firstbasetable" , et cette table contient 4 chmaps (Id , Prenom , Nom , Phone ) . L'interface graphique contient 3 entrées : Prenom , Nom , Phone , car l'Id s'incrémente tout seul .
    Voila le code de ma fonction inserer() :

    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
    def insere() :
        firstnamevar=firstname_entry.get()
        lastnamevar=lastname_entry.get()
        Phonevar=Phone_entry.get()
        print '%s  :  %s   :  %s'%(firstnamevar, lastnamevar, Phonevar)
        connect()
        cur = conn.cursor()
        a = 'Prénom3'
        #cur.execute("INSERT INTO firstbasetable VALUES (5, 'Prénom5', 'Nom5', '0000000005')")
        cur.execute("INSERT INTO firstbasetable ( Prenom, Nom, Phone) VALUES ('%s', '%s', '%s');"%(firstnamevar, lastnamevar, Phonevar )) 
        #cur.executemany("""INSERT INTO firstbasetable(Prenom, Nom, Phone) VALUES (%(first_name)s, %(firstnamevar, lastnamevar, Phonevar )s)""", namedict)
     
     
        cur.close()
        conn.commit()
    Merci bien

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    La requête est bonne donc quel est votre problème en fait ?

  3. #3
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2011
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2011
    Messages : 88
    Par défaut Insertion de données depuis Python
    Bonjour

    Merci punkoff pour me repondre , en fait , quand je click sur le boutton "inserer" j'obtient le message d'erreur suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Exception in Tkinter callback
    Traceback (most recent call last):
      File "/usr/lib/python2.6/lib-tk/Tkinter.py", line 1413, in __call__
        return self.func(*args)
      File "./TkDbPostgresql.py", line 85, in insere
        cur.execute("INSERT INTO firstbasetable ( Prenom, Nom, Phone) VALUES (%s, %s, %s)",(firstnamevar, lastnamevar, Phonevar ))
    ProgrammingError: ERREUR:  la colonne « prenom » de la relation « firstbasetable » n'existe pas
    LINE 1: INSERT INTO firstbasetable ( Prenom, Nom, Phone) VALUES (E't...
    Jen sais pas c'est du à quoi ? merci bien

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    qu'il ne trouve pas de colonne nommé "prenom" dans la table firstbasetable.

    si la requete marche tel quelle avec pgadmin, vous avez surement un problème de connexion ou de droit.. (encore que je pesnes que le message d'erreur serai différent dans les 2 cas cités)

  5. #5
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2011
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2011
    Messages : 88
    Par défaut
    essaie de me comprendre :
    quand je remplace :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cur.execute("INSERT INTO firstbasetable ( Prenom, Nom, Phone) VALUES (%s, %s, %s)",(firstnamevar, lastnamevar, Phonevar ))
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cur.execute("INSERT INTO firstbasetable VALUES (5, 'Prénom5', 'Nom5', '0000000005')")
    ça rajoute bien les données, et ça marche trés bien , mais moi mes données sont ce qu'on tape sur les entrées de l'interface graphique du programme , alors ce sont des variables

  6. #6
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    cf message d'erreur, vous utilisez les mauvais nom de colonnes pour faire votre insert

  7. #7
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2011
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2011
    Messages : 88
    Par défaut Insertion de données depuis Python
    Bonjour , Oui justement , j'aimerai bien savoir koi faire pour que ça marche

  8. #8
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    oki,

    postez le code de création de votre table, ceci est trouvable via pg_admin (create table ..)

  9. #9
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2011
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2011
    Messages : 88
    Par défaut Tkinter avec PostgreSQL
    Ok ,merci , le voila :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    CREATE TABLE firstbasetable
    (
      "Idpersonnes" serial NOT NULL,
      "Prenom" character(20) NOT NULL,
      "Nom" character(20) NOT NULL,
      "Phone" character(20) NOT NULL,
      CONSTRAINT "clépersonnes" PRIMARY KEY ("Idpersonnes")
    )
    WITH (
      OIDS=FALSE
    );
    ALTER TABLE firstbasetable OWNER TO postgres;

  10. #10
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    T'as requête initiale est donc bonne.

    La sa sort de mes compétences vu que sa touche plutot ton code python.

    un test bête, est-ce que ceci marche ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    cur.execute("INSERT INTO firstbasetable (Idpersonnes, Prenom, Nom, Phone) VALUES (6, 'Prénom6', 'Nom6', '0000000006')")
    Si oui, c'est que tu as peut-être un problème avec le binding de tes variables.. je chercherai dans ce sens

  11. #11
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2011
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2011
    Messages : 88
    Par défaut
    ça fonctionne pas , ça renvoie ce message :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ProgrammingError: ERREUR:  la colonne « idpersonnes » de la relation « firstbasetable » n'existe pas
    LINE 1: INSERT INTO firstbasetable (Idpersonnes, Prenom, Nom, Phone)...
    Tu vois ? ça met "idpersonnes" en miniscule ....

  12. #12
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2011
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2011
    Messages : 88
    Par défaut
    Par contre cette ecriture insere bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cur.execute("INSERT INTO firstbasetable VALUES (5, 'Prénom5', 'Nom5', '0000000005')")

  13. #13
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    Citation Envoyé par Ismatus1 Voir le message
    Tu vois ? ça met "idpersonnes" en miniscule ....
    C'est une piste, aussi

    Si tu crée ta table sans majuscule est-ce que ca passe ?

  14. #14
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2011
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2011
    Messages : 88
    Par défaut
    Ok , maintenant la commande suivante à bien fonctionnait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cur.execute("""INSERT INTO firstbasetable ("Idpersonnes", "Prenom", "Nom", "Phone") VALUES (6, 'Prénom6', 'Nom6', '0000000006')""")

  15. #15
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Par défaut
    C'est le problème assez classique d'avoir des guillements autour des noms de colonne au moment de la création de la table sans en deviner les conséquences.
    La conséquence est que par la suite il faudra toujours mettre ces guillemets autour du nom de colonne, ce qui est pénible dans les langages de programmation où ce caractère est déjà utilisé pour délimiter les chaines de caractère.
    En fait les guillemets au moment de la création ne sont utiles que si on a des caractères non standard dans le nom de colonne ou bien si on veut absolument être case-sensitive.

    Dans le create table montré, les guillemets sont obligatoires autour de clépersonnes à cause de l'accent mais pour le reste il vaut mieux s'en passer.

  16. #16
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2011
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2011
    Messages : 88
    Par défaut
    Bonsoir estofilo , merci bien ami pour me repondre , j'ai pu enfin inserer mes données .
    Le probleme que j'essaie de resoudre maintenant c'est que j'arrive pas à afficher des "é" sur ma Treeview Tkinter ...

Discussions similaires

  1. [Débutant] Problème d'insertion de données depuis un datagridview
    Par dinjer dans le forum VB.NET
    Réponses: 4
    Dernier message: 28/11/2014, 10h20
  2. Insertion de données depuis Access vers Word
    Par Doken dans le forum VBA Word
    Réponses: 3
    Dernier message: 13/09/2013, 08h27
  3. Pb insertion de données depuis un serveur lié
    Par weebo dans le forum MS SQL Server
    Réponses: 16
    Dernier message: 19/10/2011, 11h16
  4. Problème d'insertion des données depuis Forms 10g
    Par monthaldo dans le forum Forms
    Réponses: 5
    Dernier message: 15/03/2010, 12h59
  5. pb d'insertion de données depuis un fichier externe-COPY
    Par boulou32 dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 29/01/2005, 18h50

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