Psycopg es el adaptador PostgreSQL más popular utilizado en Python. Funciona según el principio de la implementación completa de Python DB API 2.0 junto con la seguridad de subprocesos (la misma conexión es compartida por varios subprocesos). Está diseñado para realizar aplicaciones con muchos subprocesos múltiples que generalmente crean y destruyen muchos cursores y realizan una gran cantidad de INSERCIONES o ACTUALIZACIONES simultáneas. Psycopg presenta cursores del lado del cliente y del lado del servidor, comunicación asíncrona y notificación. Psycopg 2 es compatible tanto con Unicode como con Python 3.
Instalación:
La implementación actual de psycopg2 admite:
- Versiones de Python de 3.6 a 3.10
- Versiones de servidor PostgreSQL de 7.4 a 14
- Versión de la biblioteca del cliente PostgreSQL de 9.1
- pgAdmin 4
Para la mayoría de los sistemas operativos disponibles, la forma más rápida de instalar este paquete es a través del paquete de rueda disponible en la biblioteca PyPI. Debemos asegurarnos de que usamos la última versión de pip, la cual se puede actualizar usando el siguiente comando en la terminal.
$ pip install -U pip $ pip install psycopg2-binary
Esto instalará la versión binaria precompilada del módulo que no requiere los requisitos previos de construcción o tiempo de ejecución. Luego podemos importar el paquete psycopg2 de la manera habitual:
Uso básico del módulo:
El uso básico de Psycopg es implementar el protocolo DB API 2.0 en todos los adaptadores de bases de datos. Aquí está la sesión interactiva básica de los comandos básicos.
Ejemplo 1 : Programa para establecer una conexión entre el programa python y una base de datos PostgreSQL.
Python3
import psycopg2 DB_NAME = "tkgafrwp" DB_USER = "tkgafrwp" DB_PASS = "iYYtLAXVbid-i6MV3NO1EnU-_9SW2uEi" DB_HOST = "tyke.db.elephantsql.com" DB_PORT = "5432" try: conn = psycopg2.connect(database=DB_NAME, user=DB_USER, password=DB_PASS, host=DB_HOST, port=DB_PORT) print("Database connected successfully") except: print("Database not connected successfully")
Ejemplo 2: Crear una tabla usando python
Python3
import psycopg2 DB_NAME = "tkgafrwp" DB_USER = "tkgafrwp" DB_PASS = "iYYtLAXVbid-i6MV3NO1EnU-_9SW2uEi" DB_HOST = "tyke.db.elephantsql.com" DB_PORT = "5432" conn = psycopg2.connect(database=DB_NAME, user=DB_USER, password=DB_PASS, host=DB_HOST, port=DB_PORT) print("Database connected successfully") cur = conn.cursor() # creating a cursor # executing queries to create table cur.execute(""" CREATE TABLE Employee ( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, EMAI TEXT NOT NULL ) """) # commit the changes conn.commit() print("Table Created successfully")
Ejemplo 3: Insertar datos en la tabla:
Python3
import psycopg2 DB_NAME = "tkgafrwp" DB_USER = "tkgafrwp" DB_PASS = "iYYtLAXVbid-i6MV3NO1EnU-_9SW2uEi" DB_HOST = "tyke.db.elephantsql.com" DB_PORT = "5432" conn = psycopg2.connect(database=DB_NAME, user=DB_USER, password=DB_PASS, host=DB_HOST, port=DB_PORT) print("Database connected successfully") cur = conn.cursor() cur.execute(""" INSERT INTO Employee (ID,NAME,EMAI) VALUES (1,'Alan Walker','awalker@gmail.com'), (2,'Steve Jobs','sjobs@gmail.com') """) conn.commit() conn.close()
Pasar parámetros a consultas SQL
Las variables de Python se convierten en valores SQL con Psycopg, Python determina la función utilizada para convertir el objeto en una representación de string adecuada para PostgreSQL. El paso de parámetros a una declaración SQL ocurre en funciones como cursor.execute() usando %s como marcador de posición en la instrucción SQL.
Ejemplo 4: Obtener los datos de la base de datos y mostrarlos en la terminal.
Python3
from mysqlx import Row import psycopg2 DB_NAME = "tkgafrwp" DB_USER = "tkgafrwp" DB_PASS = "iYYtLAXVbid-i6MV3NO1EnU-_9SW2uEi" DB_HOST = "tyke.db.elephantsql.com" DB_PORT = "5432" conn = psycopg2.connect(database=DB_NAME, user=DB_USER, password=DB_PASS, host=DB_HOST, port=DB_PORT) print("Database connected successfully") cur = conn.cursor() cur.execute("SELECT * FROM Employee") rows = cur.fetchall() for data in rows: print("ID :" + str(data[0])) print("NAME :" + data[1]) print("EMAIL :" + data[2]) print('Data fetched successfully') conn.close()
Ejemplo 5: Actualización de los datos en la base de datos.
Python3
from turtle import st from mysqlx import Row import psycopg2 DB_NAME = "tkgafrwp" DB_USER = "tkgafrwp" DB_PASS = "iYYtLAXVbid-i6MV3NO1EnU-_9SW2uEi" DB_HOST = "tyke.db.elephantsql.com" DB_PORT = "5432" conn = psycopg2.connect(database=DB_NAME, user=DB_USER, password=DB_PASS, host=DB_HOST, port=DB_PORT) print("Database connected successfully") cur = conn.cursor() cur.execute("UPDATE Employee set EMAI = 'updated@gmail.com' WHERE ID =1 ") conn.commit() print("Data updated Successfully") print("Total row affected "+str(cur.rowcount)) conn.close()
Ejemplo 6: Eliminación de datos de la base de datos.
Python3
from turtle import st from mysqlx import Row import psycopg2 DB_NAME = "tkgafrwp" DB_USER = "tkgafrwp" DB_PASS = "iYYtLAXVbid-i6MV3NO1EnU-_9SW2uEi" DB_HOST = "tyke.db.elephantsql.com" DB_PORT = "5432" conn = psycopg2.connect(database=DB_NAME,user=DB_USER,password=DB_PASS, host=DB_HOST,port=DB_PORT) print("Database connected successfully") cur = conn.cursor() cur.execute("DELETE FROM Employee WHERE ID =1 ") conn.commit() print("Data deleted Successfully") print("Total row affected "+str(cur.rowcount)) conn.close()
Los principales puntos de entrada de Psycopg son:
- La función connect() crea una nueva sesión de base de datos y devuelve una nueva instancia de conexión.
- La conexión de clase encierra una sesión de base de datos. Permite:
- crear nueva instancia de cursor
- terminar la transacción usando los métodos commit() o rollback().
- El cursor permite la interacción con la base de datos:
- enviar comandos a la base de datos usando los métodos execute() y executemany().
- recuperar datos de la base de datos usando métodos como fetchone(), fetchmany(), fetchall() o por iteración.