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

Python Discussion :

Connecter Python avec PostgreSQL


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 Connecter Python avec PostgreSQL
    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

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 491
    Par défaut
    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()

  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 Affichage dans un Treeview
    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 :
    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()
    ç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
    UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 2: ordinal not in range(128)
    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
    charset = "utf8" , use_unicode=True
    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
    db = MySQLdb.connect(host = "localhost", user = "root", passwd = "firstmysql",db = "testbase",charset = "utf8" , use_unicode=True)
    J'arrive pas à en sortir encore ...

  4. #4
    Membre émérite
    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 491
    Par défaut
    essaie avant de faire l'insert de rajouter l'instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ...
    cur.execute("set client_encoding to 'le_codage';
    SELECT * from firstbasetable")
    il faut remplacer le_codage par le codage ultiliser dans ton appli python

  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 Affichage dans un Treeview
    Mercii xavier-Pierre pour ta réponse , je vais essayer tout de suite et reviens te dire le resultat

  6. #6
    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
    j'ai essayé le code mais ça affiche toujours le message :

    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)
    j'ai remplacé 'le_code' par ' UTF8' , 'Utf-8' , 'UTF-8' , ... , mais ça ne marche pas

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 23/04/2010, 18h04
  2. Connecter Hibernate avec PostgreSql
    Par NGeVtC87 dans le forum Hibernate
    Réponses: 2
    Dernier message: 29/01/2010, 22h05
  3. connection python avec la base de donne postgresql
    Par bouchranaoufal dans le forum Général Python
    Réponses: 1
    Dernier message: 06/10/2009, 14h34
  4. Se Connecter Python avec Oracle
    Par Dayssam dans le forum Bibliothèques tierces
    Réponses: 1
    Dernier message: 09/05/2008, 22h31
  5. Probleme avec Postgresql de connection a distance
    Par ToMs dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 14/04/2006, 10h37

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