96 - PostgreSQL : Base de datos desde Python

Ver video

La tercer base de datos que veremos su acceso desde Python es PostgreSQL.

Se encuentra invitado para desarrollar un curso completo de PostgreSQL Ya!

Tenga en cuenta que debe tener instalado el motor de base de datos PostgreSQL para poder seguir este concepto. En el tutorial de PostgreSQL están todos los pasos para su instalación.

Creación de una base de datos y una tabla desde el programa pgAdmin.

Ejecutemos el programa pgAdmin accediendo desde el menú de Windows:

python pgadmin

Se abre el navegador con la aplicación:

python pgadmin

Para crear una base de datos presionamos el botón derecho del mouse donde dice "Databases" y seleccionamos la opción "Create"->"Database...":

python pgadmin crear base de datos

Aparece un diálogo donde debemos ingresar el nombre de la base de datos a crear, la llamaremos "bd1":

python pgadmin crear base de datos

Ahora podemos seleccionar en la ventana de la izquierda la base de datos "bd1" que acabamos de crear:

python pgadmin crear base de datos

Para poder ejecutar comandos SQL debemos presionar el botón derecho del mouse sobre el nombre de la base de datos "bd1" y seleccionar la opción "Query Tool..":

python pgadmin crear base de datos

Ahora crearemos la tabla articulos en la base de datos "bd1":

python pgadmin crear una tabla

Paquete de Python necesario para conectarnos a PostgreSQL.

Utilizaremos el programa 'pip' que vimos anteriormente para instalar el paquete necesario para interconectar 'Python' y 'PostgreSQL'.

Desde la línea de comandos ejecutamos el programa pip con el siguiente paquete a instalar:

pip install psycopg2

Luego de ejecutar el programa pip podemos ver que nos informa que la instalación del paquete se efectuó correctamente:

python pgadmin paquete psycopg2

Conexión con el servidor de PostgreSQL.

El primer programa que implementaremos nos conectaremos con el servidor de PostgreSQL e insertaremos un par de filas en la tabla 'articulos' que creamos desde el programa 'pgAdmin'.

Programa: ejercicio333.py

import psycopg2

conexion1 = psycopg2.connect(database="bd1", user="postgres", password="heladera")
cursor1=conexion1.cursor()
sql="insert into articulos(descripcion, precio) values (%s,%s)"
datos=("naranjas", 23.50)
cursor1.execute(sql, datos)
datos=("peras", 34)
cursor1.execute(sql, datos)
datos=("bananas", 25)
cursor1.execute(sql, datos)
conexion1.commit()
conexion1.close() 

Ejecutemos este programa para que se efectúe la carga de las tres filas en la tabla 'articulos' de la base de datos 'bd1'.

Por el momento si queremos controlar que se han cargado las tres filas en la tabla 'articulos' podemos abrir el 'pgAdmin' que viene com PostgreSQL y ver el contenido de la tabla:

insert python postgresql

Lo primero que hacemos es importar el módulo que nos permite conectarnos con PostgreSQL:

import psycopg2

Del módulo importado llamamos a la función connect pasando la ubicación con el nombre de la base de datos, nombre de usuario y la clave de dicho usuario:

conexion1 = psycopg2.connect(database="bd1", user="postgres", password="heladera")

Si por ejemplo el servidor de PostgreSQL no se encuentra en ejecución el programa se detendrá en esta línea informando un error.

Luego a partir del objeto 'conexion1' llamamos al método 'cursor':

cursor1=conexion1.cursor()

Definimos un string con el comando SQL insert disponiendo la máscara %s donde queremos que se sustituya por un valor que le pasaremos al método execute:

sql="insert into articulos(descripcion, precio) values (%s,%s)"

La variable datos es una tupla que contiene los datos que se utilizarán en la sustitución %s:

datos=("naranjas", 23.50)

Finalmente llamamos al método 'execute' y le pasamos las dos variables que acabamos de crear:

cursor1.execute(sql, datos)

Es fundamental llamar al final al método 'commit' para que queden firmes los comandos SQL 'insert':

conexion1.commit()

Recuperar todas las filas de una tabla.

Implementaremos un programa que solicite ejecutar un 'select' en la tabla 'articulos' de la base de datos 'bd1' y nos retorne todas sus filas.

Programa: ejercicio334.py

import psycopg2

conexion1 = psycopg2.connect(database="bd1", user="postgres", password="123456")
cursor1=conexion1.cursor()
cursor1.execute("select codigo, descripcion, precio from articulos")
for fila in cursor1:
    print(fila)
conexion1.close()

Cuando ejecutamos el programa podemos ver que se recuperan todas las filas de la tabla 'articulos':

select python PostgreSQL

Luego de conectarnos y crear un cursor procedemos a ejecutar el comando 'select', recorremos con un for el 'cursor1':

cursor1=conexion1.cursor()
cursor1.execute("select codigo, descripcion, precio from articulos")
for fila in cursor1:
    print(fila)

Borrado y modificación de filas.

Las otras dos actividades fundamentales que podemos hacer con una tabla es borrar filas y modificar datos.
Desarrollaremos un pequeño programa que borre el artículo cuyo código sea el 1 y modifique el precio del artículo cuyo código sea 3.

Programa: ejercicio335.py

import psycopg2

conexion1 = psycopg2.connect(database="bd1", user="postgres", password="123456")
cursor1=conexion1.cursor()
cursor1.execute("delete from articulos where codigo=1")
cursor1.execute("update articulos set precio=50 where codigo=3")
conexion1.commit()
cursor1.execute("select codigo, descripcion, precio from articulos")
for fila in cursor1:
    print(fila)
conexion1.close()    

Cuando ejecutamos el programa podemos ver que se eliminó el artículo cuyo código es 1 y se modificó el precio del artículo con código 3:

delete update python PostgreSQL

Luego de crear el cursor podemos llamar al método 'execute' varias veces y pasar distintos comando SQL:

cursor1=conexion1.cursor()
cursor1.execute("delete from articulos where codigo=1")
cursor1.execute("update articulos set precio=50 where codigo=3")

Siempre que pasemos un comando SQL: insert, delete o update debemos llamar al método commit para que quede firme los cambios en la base de datos:

conexion1.commit()

Ejecutamos finalmente un 'select' para comprobar los cambios efectuados en la tabla 'articulos':

cursor1.execute("select codigo, descripcion, precio from articulos")
for fila in cursor1:
    print(fila)