¿Cómo registrar consultas en PostgreSQL usando Python?

Python tiene varios controladores de bases de datos para PostgreSQL. La versión actual más utilizada es psycopg2. Implementa completamente la especificación Python DB-API 2.0. El psycopg2 proporciona muchas funciones útiles, como cursores del lado del cliente y del lado del servidor, notificación y comunicación asíncronas, compatibilidad con el comando COPY, etc.

Instalación

Instale el módulo psycopg2:

pip install psycopg2

Para registrar la información sobre los comandos, necesitamos instalar logtopg:

pip install logtopg

Solicitud 

  • Recopilación de información
  • Solución de problemas
  • Generando estadísticas
  • Revisión de cuentas
  • perfilado

Niveles de registro y su finalidad

Nivel Objetivo
DEPURAR Información detallada, normalmente de interés solo cuando se diagnostican problemas.
INFORMACIÓN Confirmación de que las cosas están funcionando como se esperaba.
ADVERTENCIA Una indicación de que sucedió algo inesperado, o indicativo de algún problema en el futuro cercano (por ejemplo, ‘espacio en disco bajo’). El software sigue funcionando como se esperaba.
ERROR Debido a un problema más grave, el software no ha podido realizar alguna función.
CRÍTICO Un error grave que indica que es posible que el programa en sí no pueda seguir ejecutándose.

Todos los registradores son descendientes del registrador raíz . El registrador raíz siempre tiene un nivel explícito establecido, que es ADVERTENCIA de forma predeterminada. El registrador raíz se puede utilizar para activar y desactivar fácilmente todos los registradores de todas las bibliotecas.

Pantalla de información del registrador  

Nivel Monitor
depurar Solo debe aparecer en el archivo.
información Debe aparecer en el archivo
advertencia Debería aparecer en el archivo y en la salida estándar.
error Debería aparecer en el archivo y en la salida estándar.
crítico Debería aparecer en el archivo y en la salida estándar.

   
Para comprender mejor el registro, aquí hay un código simple sin conectarse a PostgreSQL, que solo muestra mensajes en la consola.

Ejemplo:

Python3

import logging
  
# This will be printed only in file
logging.debug('This is a debug message')
  
# This will be printed only in file
logging.info('This is an info message')
  
logging.warning('This is a warning message')
logging.error('This is an error message')
logging.critical('This is a critical message')

Producción:

Se usó el registrador raíz y solo se escribieron tres mensajes. Esto se debe a que, de forma predeterminada, solo se escriben los mensajes con advertencia de nivel y superiores.

A continuación se muestra un ejemplo más para comprender los niveles de registro. El nivel de registro se establece con setLevel(). 

Ejemplo 1:

Python3

import logging
  
# The getLogger() returns a logger with the specified name.
# If name is None, it returns the root logger.
logger = logging.getLogger('dev')
  
# Level is set
logger.setLevel(logging.DEBUG)
  
logger.debug('This is a debug message')
logger.info('This is an info message')
logger.warning('This is a warning message via setLevel')
logger.error('This is an error message via setLevel')
logger.critical('This is a critical message via setLevel')

Producción :

getLogger y setLevel

Ejemplo 2:

“mylib.py” debe estar en el mismo directorio donde existe “sample.py” y también el archivo creado “myapp.log” estará presente en el mismo directorio donde están mylib.py y sample.py

mylib.py

Python3

#Let this program name be mylib.py
import logging
  
def from_mylib():
    logging.info('I am from mylib')

Usemos mylib.py en otro código 

muestra.py

Python3

#logging module is required to log information
import logging
  
# User created python code and should be in same directory
import mylib
  
def main():
  
    # As we have specified myapp.log, all log information will be there
    # logging.INFO is the level, it will get printed
    logging.basicConfig(filename='myapp.log', level=logging.INFO)
    logging.info('Started to print logger info')
      
    # calling mylib method here as have imported. It should be
    # in same directory
    mylib.from_mylib()
    logging.info('Finished logging the information!!!')
  
# Main code
if __name__ == '__main__':
    main()

Salida de myapp.log (que se crea en el mismo directorio donde están presentes mylib.py y sample.py)

contenido de myapp.log

Ejemplo 3:

Este ejemplo analiza la interacción con PostgreSQL con la base de datos. pgAdmin o psql son las herramientas de cliente que se pueden usar para iniciar sesión en el servidor de base de datos PostgreSQL.

NOMBRE DE LA BASE DE DATOS: testdb

NOMBRE DE LA TABLA: empleado

Python3

import logging
import psycopg2
from psycopg2.extras import LoggingConnection
  
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger("loggerinformation")
  
# We need to specify the necessary parameters in the below list
# As connecting with postgres/password as username/password and with testdb as parameters
db_settings = {
    "user": "postgres",
    "password": "password",
    "host": "127.0.0.1",
    "database": "testdb",
}
  
# connect to the PostgreSQL server
conn = psycopg2.connect(connection_factory=LoggingConnection, **db_settings)
conn.initialize(logger)
  
cur = conn.cursor()
cur.execute("SELECT * FROM employee")

Producción :

Ejemplo 4:

Python3

import logging
import psycopg2
from psycopg2.extras import LoggingConnection
  
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger("loggerinformation")
  
db_settings = {
    "user": "postgres",
    "password": "password",
    "host": "127.0.0.1",
    "database": "testdb",
}
  
conn = psycopg2.connect(connection_factory=LoggingConnection, **db_settings)
conn.initialize(logger)
  
cur = conn.cursor()
cur.execute("SELECT * FROM employee")
  
# insert records in employee table
cur.execute(
    "INSERT INTO employee (first_name,last_name,age,gender,income) VALUES ('123','456',20,'m',20000)")

Producción:

seleccionar e insertar registro de consultas

Publicación traducida automáticamente

Artículo escrito por priyarajtt y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *