PostgreSQL: conéctese al servidor de base de datos PostgreSQL en Python

El adaptador de base de datos psycopg se utiliza para conectarse con el servidor de base de datos PostgreSQL a través de python.

Instalando psycopg:

Primero, use la siguiente línea de comando desde la terminal:

pip install psycopg

Si ha descargado el paquete fuente en su computadora, puede usar setup.py de la siguiente manera:

python setup.py build
sudo python setup.py install

Crear una nueva base de datos

Primero, inicie sesión en el servidor de la base de datos PostgreSQL usando cualquier herramienta de cliente como pgAdmin o psql.

En segundo lugar, use la siguiente declaración para crear una nueva base de datos denominada proveedores en el servidor de base de datos de PostgreSQL.

CREATE DATABASE suppliers;

Conéctese a la base de datos PostgreSQL usando psycopg2

Para conectarse a la base de datos de proveedores, utilice la función connect() del módulo psycopg2.

La función connect() crea una nueva sesión de base de datos y devuelve una nueva instancia de la clase de conexión. Al usar el objeto de conexión, puede crear un nuevo cursor para ejecutar cualquier instrucción SQL.

Para llamar a la función connect(), especifique los parámetros de la base de datos de PostgreSQL como una string de conexión y páselo a la función de esta manera:

conn = psycopg2.connect("dbname=suppliers user=postgres password=postgres")

O puede usar una lista de argumentos de palabras clave:

conn = psycopg2.connect(
    host="localhost",
    database="suppliers",
    user="postgres",
    password="Abcd1234")

La siguiente es la lista de los parámetros de conexión:

   base de datos: el nombre de la base de datos que desea conectar.

   usuario: el nombre de usuario utilizado para autenticarse.

   contraseña: contraseña utilizada para autenticarse.

   host: dirección del servidor de la base de datos, por ejemplo, localhost o una dirección IP.

   puerto: el número de puerto que por defecto es 5432 si no se proporciona.

Para hacerlo más conveniente, puede usar un archivo de configuración para almacenar todos los parámetros de conexión.

A continuación se muestra el contenido del archivo database.ini:

[postgresql]
host=localhost
database=suppliers
user=postgres
password=SecurePas$1

Mediante el uso de database.ini, puede cambiar los parámetros de conexión de PostgreSQL cuando mueve el código al entorno de producción sin modificar el código.

Tenga en cuenta que si usa git, debe agregar la base de datos.ini al archivo .gitignore para no enviar la información confidencial al repositorio público como github. El archivo .gitignore será así:

database.ini

La siguiente función config() lee el archivo database.ini y devuelve los parámetros de conexión. La función config() se coloca en el archivo config.py:

#!/usr/bin/python
from configparser import ConfigParser


def config(filename='database.ini', section='postgresql'):
    # create a parser
    parser = ConfigParser()
    # read config file
    parser.read(filename)

    # get section, default to postgresql
    db = {}
    if parser.has_section(section):
        params = parser.items(section)
        for param in params:
            db[param[0]] = param[1]
    else:
        raise Exception('Section {0} not found in the {1} file'.format(section, filename))

    return db

La siguiente función connect() se conecta a la base de datos de proveedores e imprime la versión de la base de datos de PostgreSQL.

#!/usr/bin/python
import psycopg2
from config import config

def connect():
    """ Connect to the PostgreSQL database server """
    conn = None
    try:
        # read connection parameters
        params = config()

        # connect to the PostgreSQL server
        print('Connecting to the PostgreSQL database...')
        conn = psycopg2.connect(**params)
        
        # create a cursor
        cur = conn.cursor()
        
    # execute a statement
        print('PostgreSQL database version:')
        cur.execute('SELECT version()')

        # display the PostgreSQL database server version
        db_version = cur.fetchone()
        print(db_version)
       
    # close the communication with the PostgreSQL
        cur.close()
    except (Exception, psycopg2.DatabaseError) as error:
        print(error)
    finally:
        if conn is not None:
            conn.close()
            print('Database connection closed.')


if __name__ == '__main__':
    connect()

Cómo funciona.

   Primero, lea los parámetros de conexión de la base de datos del archivo database.ini.

   A continuación, cree una nueva conexión de base de datos llamando a la función connect().

   Luego, cree un nuevo cursor y ejecute una instrucción SQL para obtener la versión de la base de datos de PostgreSQL.

   Después de eso, lea el conjunto de resultados llamando al método fetchone() del objeto del cursor.

   Finalmente, cierre la comunicación con el servidor de la base de datos llamando al método close() del cursor y los objetos de conexión.

Ejecute el archivo connect.py

Para ejecutar el archivo connect.py, utiliza el siguiente comando:

python connect.py

Verá el siguiente resultado:

Connecting to the PostgreSQL database...
PostgreSQL database version:
('PostgreSQL 12.3, compiled by Visual C++ build 1914, 64-bit', )
Database connection closed.

Solución de problemas

La función connect() lanza la excepción DatabaseError si ocurre un error. Para ver cómo funciona, puede cambiar los parámetros de conexión en el archivo base de datos.ini.

Por ejemplo, si cambia el host a localhosts, el programa generará el siguiente mensaje:

Connecting to the PostgreSQL database...
could not translate host name "localhosts" to address: Unknown host

Lo siguiente muestra un mensaje de error cuando cambia la base de datos a una base de datos que no existe, por ejemplo, proveedor:

Connecting to the PostgreSQL database...
FATAL: database "supplier" does not exist

Si cambia el usuario a postgress, no se autenticará correctamente de la siguiente manera:

Connecting to the PostgreSQL database...
FATAL: password authentication failed for user "postgress"

Publicación traducida automáticamente

Artículo escrito por imabadassbabua 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 *