Bonjour tout le monde , je viens de créer ma base de données sur PgAdmin , et je veux l'acceder depuis un code python , comment faire ? j'ai deja le module "Psycopg2" .. merci
Bonjour tout le monde , je viens de créer ma base de données sur PgAdmin , et je veux l'acceder depuis un code python , comment faire ? j'ai deja le module "Psycopg2" .. merci
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 import psycopg2 # on crée la connection connect=psycopg2.connect("dbname='ta_base' user='nom_user' host=adresse_ip password='mot _passe'") # on crée un curseur cur = connect.cursor() #execution requete cur.execute("select * from ma_table") # on recupère le resultat avec fetchone() ou fetchall() #exemple onécrit les enregistrements for enr in cur.fetcall(): print enr # si tu fais un insert ou update il faut mettre l'instruction commit pour valider cur.execute("update ma_table set...") cur.commit() # pour fermer connection connect.close()
Bonjour xavier-Pierre , merci pour ta réponse , j'ai enfin pu connecté l'interface Tkinter avec ma base PostgreSQL , j'ai mis ce code :
ça marche bien , sauf que dans la fonction afficher() , quand j'insere les données dans la Treeview j'ai le message d'erreur 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
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93 #! /usr/bin/python #-*- coding:Utf-8-*- from Tkinter import * import ttk import psycopg2 def center(window): sw = window.winfo_screenwidth() sh = window.winfo_screenheight() rw = window.winfo_reqwidth() rh = window.winfo_reqheight() xc = (sw - rw) / 2 yc = (sh -rh) / 2 window.geometry("+%d+%d" % (xc, yc)) window.deiconify() def afficher() : connect() cur = conn.cursor() cur.execute("""SELECT * from firstbasetable""") rows = cur.fetchall() if rows : for z in rows: print z[1] + ' : ' + str(z[2]) tv.insert("","end", values=(z[1], z[2], z[3])) def connect() : global conn conn = psycopg2.connect("host='localhost' dbname='firstbase' user='postgres' password='pesbakpostgresql'") fenetre=Tk() fenetre.geometry("500x400") fenetre.title(' Test Data') firstnamevar = StringVar() lastnamevar = StringVar() Phonevar = IntVar() f1 = Frame(fenetre, bg="#290080", width=500, height=500) f1.pack( fill=X, expand=0) lab1 = Label(fenetre, text="Voila la table testtable de la base testbase" , bg = "#290080", fg = "white" ) lab1.place ( x=100 , y=15 ) lab1 = Label(fenetre, text="Prénom" , bg = "#290080", fg = "white" ) lab1.place ( x=30 , y=100 ) lab1 = Label(fenetre, text="Nom" , bg = "#290080", fg = "white" ) lab1.place ( x=30 , y=125) lab1 = Label(fenetre, text="Phone" , bg = "#290080", fg = "white" ) lab1.place ( x=30 , y=150) firstname_entry = ttk.Entry(fenetre, width=15, textvariable=firstnamevar) firstname_entry.place (x = 100 , y = 100 ) lastname_entry = ttk.Entry(fenetre, width=15, textvariable=lastnamevar) lastname_entry.place (x = 100 , y = 125 ) Phone_entry = ttk.Entry(fenetre, width=15, textvariable=Phonevar) Phone_entry.place (x = 100 , y = 150 ) Phonevar.set("") scrollbar = Scrollbar(fenetre) scrollbar.place (x = 412 , y = 301 ) tv = ttk.Treeview(fenetre, show='headings', height =3, yscrollcommand=scrollbar.set) tv["columns"]=("col1","col2","col3") tv.column("col1",width=100,anchor="center", stretch = True, minwidth = 50) tv.column("col2",width=100,anchor="center") tv.column("col3",width=110,anchor="center") tv.heading("col1",text="Prénom") tv.heading("col2",text="Nom") tv.heading("col3",text="Phone number") tv.place( x = 100 , y = 250 ) scrollbar.config(command=tv.yview) afficher = Button(fenetre, text = "Afficher" , command = afficher) afficher.place( x=315, y=80 ) inserer = Button(fenetre, text = "Inserer" , command = insere) inserer.place( x=315, y=110 ) modifier = Button(fenetre, text = "Modifier" ) #, command = modif) modifier.place( x=315, y=140 ) supprimer = Button(fenetre, text = "Supprimer" , command = afficheselected) supprimer.place( x=315, y=170 ) Quitter = Button(fenetre, text = "Quitter" , command = fenetre.quit) Quitter.place( x=200, y=350 ) fenetre.after(0,center,fenetre) fenetre.mainloop()
Et si j'affiche les données sur un terminale c'est bien : car j'ai dans la bas Prénom1 , Prénom2 dans un champ "Prenom" de la table "firstbasetable " , je pense que le probleme vient du manque des deux commandes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 2: ordinal not in range(128)
qui doivent etre dans la définition de la connexion comme dans mysql , mais je sais pas comment les placer avec psycopg2 , sur MySQL c'est comme ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part charset = "utf8" , use_unicode=True
J'arrive pas à en sortir encore ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part db = MySQLdb.connect(host = "localhost", user = "root", passwd = "firstmysql",db = "testbase",charset = "utf8" , use_unicode=True)
essaie avant de faire l'insert de rajouter l'instruction
il faut remplacer le_codage par le codage ultiliser dans ton appli python
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 ... cur.execute("set client_encoding to 'le_codage'; SELECT * from firstbasetable")
Mercii xavier-Pierre pour ta réponse , je vais essayer tout de suite et reviens te dire le resultat
j'ai essayé le code mais ça affiche toujours le message :
j'ai remplacé 'le_code' par ' UTF8' , 'Utf-8' , 'UTF-8' , ... , mais ça ne marche pas
Code : Sélectionner tout - Visualiser dans une fenêtre à part UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 2: ordinal not in range(128)
Salut
Remplace
par
Code python : Sélectionner tout - Visualiser dans une fenêtre à part print z[1] + ' : ' + str(z[2])
Code python : Sélectionner tout - Visualiser dans une fenêtre à part print "%s : %s" % (z[1], z[2])
Et si ça ne marche toujours pas, alors
Code python : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 print "%s : %s" % ( z[1].decode('utf-8').encode('latin-1'), z[2].decode('utf-8').encode('latin-1'), )
Bonjour , merci Svear pour la reponse , j'ai essayé tout ce que tu m'as proposé , en fait le probleme n'est pas pour le "print" , car ça affiche bien "Prénom1" sur un terminal , et aussi sur un Label comme texte , le probleme vient surtout quand je veux inserer mes données dans le Treeview de Tkinter , alors dans l'Erreur au terminale on dit que l'erreur commence à la ligne :
Merci bien
Code : Sélectionner tout - Visualiser dans une fenêtre à part tv.insert("","end", values=(z[1], z[2], z[3]))
Je ne connais pas tk, moi j'utilise Qt.
Cependant ça peut arriver que je me trompe dans Qt. Par exemple une de mes erreurs les plus courantes, dans un QTreeWidget justement, est de passer un QString (chaine Qt) au QTreeWidgetItem alors que celui-ci attend un QStringList (tableau de chaines).
Donc
1) vérifie le type précis attendu dans "values="
2) vérifie en affichant type(z[x]) que chaque élément x est du bon type
Accessoirement, ton code peut se réécrire
Code : Sélectionner tout - Visualiser dans une fenêtre à part tv.insert("","end", values=z[1:4])
Bonjour svear , merci pour la réponse , mais , je ne sais pas comment traduire ce que tu m'avais dis pour Tkinter ... J'ai posté mon code , si tu peux le modifier et l'enregistrer ça sera bien ...
Je t'ai dit de vérifier (dans la documentation) quel type précis était attendu dans le paramètre "values=" d'un Treeview... puis de vérifier si chaque v[x] que toi tu lui passes était du type correspondant. C'est un travail perso que toi seul peut faire. Suffit de 1) lire la doc et 2) afficher type(v[x])
Tu l'as posté où ? Rien dans mes MP ni dans ma boite mail. De toute façon on n'est pas là pour réécrire ton code non plus...
Bonjour Svear , en fait le probleme était du à un decodage qui doit se faire avec une commande comme ainsi :
et ça fonctionnait enfin , merci bien ami
Code : Sélectionner tout - Visualiser dans une fenêtre à part tv.insert("","end", values=("%s %s %s"%(z[1].decode('utf-8'), z[2].decode('utf-8'), z[3].decode('utf-8'))))
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager