blur close up code computer

Variables de entorno con Dotenv en Python

Ayer estuve peleando gran parte del día con las variables de entorno… De Windows. Es en este contexto cuando me dicen “Podríamos aplicar Variables de Entorno…” Pero ¿para qué? cuando creamos un simple script en Python para acceder a una base de datos, necesitamos definir los parámetros de conexión. Normalmente los parámetros son diferentes en la base de datos de desarrollo y en la de producción. Adicionalmente, cuando llevas tu script en el repositorio, podría ocurrir un accidente y se suban los datos de conexión junto al resto del código.

Según la metodología Twelve-Factor App si guardas la configuración directamente en el código fuente, te fuiste a la B. Entre otras razones, porque puedes estar publicando información sensible de forma pública.

.env (Dotenv) vienen al rescate y, casi en cualquier lenguaje, en Python, el paquete en cuestión es python-dotenv.

Ejemplo de .env

# DB2
DB2_DRIVER={IBM DB2 ODBC DRIVER}
DB2_DATABASE=myDatabase
DB2_HOSTNAME=myHostname
DB2_PORT=myPort
DB2_PROTOCOL=myProtocol
DB2_UID=myUsername
DB2_PWD=myPassword
DB2_SECURITY=mySecurity

Ejemplo de conexión para DB2

import ibm_db
import os
from dotenv import load_dotenv

load_dotenv()

arg1 = 'DRIVER=' + os.getenv('DB2_DRIVER') + '; '+ 'DATABASE=' + os.getenv('DB2_DATABASE') + ';' + 'HOSTNAME=' + os.getenv('DB2_HOSTNAME') + ';' + 'PORT=' + os.getenv('DB2_PORT') + ';' + 'PROTOCOL=' + os.getenv('DB2_PROTOCOL') + ';' + 'UID=' + os.getenv('DB2_UID') + ';' + 'PWD=' + os.getenv('DB2_PWD') + ';' + 'SECURITY=' + os.getenv('DB2_SECURITY')

conn=ibm_db.connect(arg1, "", "")
if conn:
    stmt = ibm_db.exec_immediate(conn, "select schemaname from syscat.schemata")
    result = ibm_db.fetch_both(stmt)
    while( result ):
        print ('DB2 query result:', result[0])
        result = ibm_db.fetch_both(stmt)

Deja una respuesta

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