Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL
PostgreSQL Forum PostgreSQL. Avant de poster -> F.A.Q PostGreSQL Tutoriels PostGreSQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/11/2011, 16h48   #1
Nouveau Membre du Club
 
Homme
Développeur informatique
Inscription : 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
Points : 26
Points : 26
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 :
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
Ismatus1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2011, 16h58   #2
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 655
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 655
Points : 2 657
Points : 2 657
La requête est bonne donc quel est votre problème en fait ?
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2011, 17h18   #3
Nouveau Membre du Club
 
Homme
Développeur informatique
Inscription : 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
Points : 26
Points : 26
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 :
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
Ismatus1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2011, 17h25   #4
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 655
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 655
Points : 2 657
Points : 2 657
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)
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2011, 17h28   #5
Nouveau Membre du Club
 
Homme
Développeur informatique
Inscription : 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
Points : 26
Points : 26
essaie de me comprendre :
quand je remplace :

Code :
cur.execute("INSERT INTO firstbasetable ( Prenom, Nom, Phone) VALUES (%s, %s, %s)",(firstnamevar, lastnamevar, Phonevar ))
par

Code :
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
Ismatus1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2011, 21h41   #6
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 655
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 655
Points : 2 657
Points : 2 657
cf message d'erreur, vous utilisez les mauvais nom de colonnes pour faire votre insert
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2011, 10h27   #7
Nouveau Membre du Club
 
Homme
Développeur informatique
Inscription : 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
Points : 26
Points : 26
Par défaut Insertion de données depuis Python

Bonjour , Oui justement , j'aimerai bien savoir koi faire pour que ça marche
Ismatus1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2011, 10h30   #8
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 655
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 655
Points : 2 657
Points : 2 657
oki,

postez le code de création de votre table, ceci est trouvable via pg_admin (create table ..)
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2011, 10h46   #9
Nouveau Membre du Club
 
Homme
Développeur informatique
Inscription : 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
Points : 26
Points : 26
Par défaut Tkinter avec PostgreSQL

Ok ,merci , le voila :

Code :
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;
Ismatus1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2011, 10h57   #10
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 655
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 655
Points : 2 657
Points : 2 657
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 :
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
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2011, 11h03   #11
Nouveau Membre du Club
 
Homme
Développeur informatique
Inscription : 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
Points : 26
Points : 26
ça fonctionne pas , ça renvoie ce message :

Code :
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 ....
Ismatus1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2011, 11h04   #12
Nouveau Membre du Club
 
Homme
Développeur informatique
Inscription : 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
Points : 26
Points : 26
Par contre cette ecriture insere bien :

Code :
cur.execute("INSERT INTO firstbasetable VALUES (5, 'Prénom5', 'Nom5', '0000000005')")
Ismatus1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2011, 11h18   #13
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 655
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 655
Points : 2 657
Points : 2 657
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 ?
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2011, 11h38   #14
Nouveau Membre du Club
 
Homme
Développeur informatique
Inscription : 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
Points : 26
Points : 26
Ok , maintenant la commande suivante à bien fonctionnait :

Code :
cur.execute("""INSERT INTO firstbasetable ("Idpersonnes", "Prenom", "Nom", "Phone") VALUES (6, 'Prénom6', 'Nom6', '0000000006')""")
Ismatus1 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 01/12/2011, 14h38   #15
Modérateur
 
Inscription : octobre 2008
Messages : 1 508
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2008
Messages : 1 508
Points : 2 040
Points : 2 040
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.
estofilo est actuellement connecté   Envoyer un message privé Réponse avec citation 10
Vieux 01/12/2011, 17h00   #16
Nouveau Membre du Club
 
Homme
Développeur informatique
Inscription : 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
Points : 26
Points : 26
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 ...
Ismatus1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h51.


 
 
 
 
Partenaires

Hébergement Web