Seite 1 von 1

Anbindung an PostgreSQL via PyGreSQL

Verfasst: Donnerstag 10. August 2006, 13:36
von ZZHAT
Hallo zusammen,
ich habe etwas Zeit investieren müssen, um eine Verbindung
zu meiner PostgreSQL aufzubauen.
Um dem einen oder anderen, den Zeitaufwand etwas zu ersparen,
poste ich mal ein kleines Tut. :wink:
Nach viel hin und her, habe mich letztendlich für PyGreSQL entschieden
aber einen besonderen Grund gibt es nicht dafür,
da auch die anderen Projekte den aktuellen Standards
entsprechen.

Es war für mich am Anfang etwas frustrierend, eine Verbindung
zur DB hinzubekommen, da ich ständig mit Fehlern bezüglich
fehlender 'dlls' genervt wurde aber dies liess sich dann doch
recht einfach lösen.

Da ich PostgreSQL auch auf meiner Window-Schüssel
installierte hatte, habe ich nur in meine 'Path'-Umgebung
nur das 'bin'-Verzeichnis von PostgreSQL angeben müssen.

Natürlich kann man sich die einzelnen Dateien, sofern man sie
hat z.B. auch ins 'DLLs'-Verzeichnis kopieren oder sonst wohin.
Wichtig ist nur, das sie auch gefunden werden können.

Die benötigten Dateien aus dem 'bin'-Verezichnis von PostgreSQL
comerr32.dll
krb5_32.dll
libeay32.dll
libiconv-2.dll
libintl-2.dll
libpq.dll
ssleay32.dll

Ein kleines Beispiel, meiner DB-Testanbindung:

Code: Alles auswählen

from pyPgSQL import PgSQL

class PostgreSQL:
    def __init__ (self, 
                _DNS,
                _USER, 
                _PASSWORD, 
                _HOST, 
                _DBNAME,
                _PORT, 
                _OPT, 
                _TTY, 
                _CLIENT_ENCODING,
                _UNICODE_RESULTS) :

                self.DNS                = _DNS
                self.USER               = _USER
                self.PASSWORD           = _PASSWORD
                self.HOST               = _HOST
                self.DBNAME             = _DBNAME
                self.PORT               = _PORT
                self.OPT                = _OPT
                self.TTY                = _TTY
                self.CLIENT_ENCODING    = _CLIENT_ENCODING
                self.UNICODE_RESULTS    = _UNICODE_RESULTS
        
                self.db = PgSQL.connect(self.DNS,
                        self.USER, 
                        self.PASSWORD, 
                        self.HOST, 
                        self.DBNAME,
                        self.PORT, 
                        self.OPT, 
                        self.TTY, 
                        self.CLIENT_ENCODING,
                        self.UNICODE_RESULTS)
                
    def cursor(self):
        return self.db.cursor()
    
##############################################################
##############################################################
#[Database]
DNS=None
USER='user_xy'
PASSWORD='user_pwd'
HOST='localhost'
DBNAME='user_db'
PORT=5432
OPT=None
TTY=None
CLIENT_ENCODING=None
UNICODE_RESULTS=None

QUERY_00="SELECT count(*) FROM db_xy"

def MyCon(self):
    myDB = PostgreSQL(DNS,
                USER, 
                PASSWORD, 
                HOST, 
                DBNAME,
                PORT, 
                OPT, 
                TTY, 
                CLIENT_ENCODING,
                UNICODE_RESULTS)
    
    c_00 = myDB.cursor()
    c_00.execute(QUERY_00)
    
    fr_one = c_00.fetchone()
    
    print fr_one[0]


def main():
    MyCon(0)

if __name__ == '__main__':
    main()


Und am Ende war dann doch alles ganz einfach..
:lol:

Viele liebe Grüße
ZZHAT

Verfasst: Donnerstag 10. August 2006, 13:48
von murph
also fehlermeldungen helfen weiter :-)

Verfasst: Dienstag 7. August 2007, 20:53
von Beetle
Ich bekomme trotzdem keine Verbindung hin :( :(

Umgebung
Windows XP SP2
Python 2.5
PostgreSQL 8.2
PyGreSQL-3.8.1.win32-py2.5

und das wahnsinnige Beispiel ist:
from pyPgSQL import PgSQL

und die Fehlermeldung:
No Modul named pyPgSQL

Ich bitte um Hilfe!

Danke
Beetle

Verfasst: Dienstag 7. August 2007, 21:09
von BlackJack
Das Modul heisst `pgdb`.

Verfasst: Dienstag 7. August 2007, 21:19
von Beetle
Danke BlackJack,
dann stimmt an dem oben angegebenem Beispiel etwas nicht oder ich erkenne es nicht.

Danke dir!

Verfasst: Dienstag 7. August 2007, 21:36
von gerold
Beetle hat geschrieben:dann stimmt an dem oben angegebenem Beispiel etwas nicht oder
Hallo Beetle!

Es gibt viele Datenbankschnittstellen. Auch mehrere für PostgreSQL. Du hast ein Beispiel für *pyPgSQL* und verwendest es mit *PyGreSQL*.

Siehe: http://www.python-forum.de/topic-6848.html

mfg
Gerold
:-)