El mòdul més popular per accedir a PostgreSQL amb Python és Psycopg2 (http://initd.org/psycopg/).
Instal·lar aquest mòdul a la una distribució Ubuntu no presenta cap dificultat perquè està disponible al "Centre de Programari de l'Ubuntu".
També instal·lo la testsuite i l'extensió de debug, tot des del "Centre de Programari de l'Ubuntu"
Un cop instal·lats, ja es pot treballar. El primer pas és revisar la documentació i els exemples. La documentació en línia la podem trobar a http://initd.org/psycopg/docs/. I ha un altre enllaç molt interessant a la wiki de PostgreSQL: http://wiki.postgresql.org/wiki/Using_psycopg2_with_PostgreSQL.
Encara millor: podem utilitzar la documentació local de Python. si a la consola fem pydoc -g, se'ns obrirà aquesta petita aplicació, que és un mini servidor web de les pàgines HTML de l'ajuda de Python i els seus mòduls:
Ens obrirà un navegador amb la pàgina desitjada.
Doncs bé, un cop vist això, el que faré serà un experiment molt senzill que consistirà en connectar-se a una base de dades existent i executar-hi consultes.
Primer de tot, amb l'Anjuta, creo un projecte nou del tipus Python generic. Per a fer les coses més fàcils, copio l'script de prova disponible
#!/usr/bin/python
# coding: latin-1
#
import psycopg2
import sys
def main():
#Defineix la cadena de connexió
conn_string = "host='localhost' dbname='proves' user='postgres' password='postgres'"
# la mostra
print "Connectant a la base de dades\n ->%s" % (conn_string)
try:
# obté una connexió, si no es pot connectar, llença una excepció
conn = psycopg2.connect(conn_string)
# conn.cursor retorna un objecte cursor, per a fer les consultes.
cursor = conn.cursor()
print "Connectat!\n"
except:
# obté informació de l'excepció
exceptionType, exceptionValue, exceptionTraceback = sys.exc_info()
# mostra la informació i acaba.
sys.exit("Database connection failed!\n ->%s" % (exceptionValue))
# final
if __name__ == "__main__":
sys.exit(main())
Des del mateix Anjuta puc provar:
EXECUTING:
/media/DISC57GB/wk-python/ProvaPG/src/prova_pg.py
----------------------------------------------
Connectant a la base de dades
->host='localhost' dbname='proves' user='postgres' password='postgres'
Connectat!
----------------------------------------------
Program exited successfully with errcode (0)
Press the Enter key to close this terminal ...
Net i a la primera. Ara faré una consulta, afegeixo
#!/usr/bin/python
# coding: latin-1
#
import psycopg2
import sys
def main():
#Defineix la cadena de connexió
conn_string = "host='localhost' dbname='proves' user='postgres' password='postgres'"
# la mostra
print "Connectant a la base de dades\n ->%s" % (conn_string)
try:
# obté una connexió, si no es pot connectar, llença una excepció
conn = psycopg2.connect(conn_string)
# conn.cursor retorna un objecte cursor, per a fer les consultes.
cursor = conn.cursor()
print "Connectat!\n"
# executa una consulta
cursor.execute("SELECT * FROM taula1")
# recupera files de la taula
v_files = cursor.fetchall()
print "Retorna: " + str(cursor.rowcount) + " files"
# mostra les files
for v_fila in v_files:
print str(v_fila[0]) + " ; " + v_fila[1] + " ; " + v_fila[2]
# i surt
conn.close()
except:
# obté informació de l'excepció
exceptionType, exceptionValue, exceptionTraceback = sys.exc_info()
# mostra la informació i acaba.
sys.exit("Database connection failed!\n ->%s" % (exceptionValue))
# final
if __name__ == "__main__":
sys.exit(main())
I el resultat, com calia esperar:
EXECUTING:
/media/DISC57GB/wk-python/ProvaPG/src/prova_pg.py
----------------------------------------------
Connectant a la base de dades
->host='localhost' dbname='proves' user='postgres' password='postgres'
Connectat!
Retorna: 5 files
1 ; valor 1 ; traducció 1
2 ; valor 2 ; traducció 2
3 ; valor 3 ; traducció 3
4 ; valor 4 ; traducció 4
5 ; valor 5 ; traducció 5
----------------------------------------------
Program exited successfully with errcode (0)
Press the Enter key to close this terminal ...
Un senzill experiment de com utilitzar PostgreSQL amb scripts de Python fent servir el mòdul Psycopg2.
Cap comentari:
Publica un comentari a l'entrada