es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Importa el paquete personalizado de Python, con Args, en otro archivo py desde un directorio de ubicación de red.

Necesito construir una solución para un caso de uso y todavía soy un poco novato en las capacidades de Python para la versión 3.9.9.

Caso de uso:

  • El usuario Billy quiere ejecutar un script contra un servidor Snowflake en la base de datos de Azure, llamada sandbox, utilizando su propio script de Python en su máquina local.
  • El script de Python de Billy, para mantener segura la configuración de conexión, necesita llamar a un script snowflakeconn.py, el cual se encuentra en otra ubicación de carpeta de red (\abs\here\is\snowflakeconn.py), y pasar argumentos para la base de datos y el esquema.
  • La llamada devolverá una conexión a Snowflake que Billy puede usar para ejecutar su script SQL.

Imagino algo como esto:

import pandas as pd
import snowflake_conn # Necesito saber cómo encontrar esto en una carpeta de red, no local.

y luego llamar a la función conn personalizada

snowflake_connect(‘database’,’schema’)

donde devuelve el cursor snowflake.connector.connect() como sfconn

conn1 = sfconn.conn()
qry = r’select * from tablename where 1=1′;

conn1.execute(qry)
df = conn1.fetch_pandas_all()

Vi algo así… pero eso fue en 2016 y probablemente antes de la versión 3.9.9.

import sys
sys.path.insert(0, “/network/modules/location”) # OR “\abs\here\is\??”
import snowflake_conn

Ese archivo snowflakeconn.py utiliza el comando configparser.ConfigParser().read() para abrir un archivo config.ini en la misma carpeta que el script snowflakeconn.py.

Estoy siguiendo las instrucciones en otra pregunta de stackoverflow, el enlace a continuación es de hace 4 años, para ayudar a completar la configuración de config.ini.

https://stackoverflow.com/questions/42906665/import-my-database-connection-with-python

También encontré este enlace, que parece apuntar a una estructura de carpeta local solamente, no a una carpeta de red.
https://blog.finxter.com/python-how-to-import-modules-from-another-folder/

Eventualmente quiero intentar cifrar el archivo .ini para proteger el contenido de ese archivo y aumentar la seguridad, pero todavía no estoy seguro de por dónde empezar en eso.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Solución para ejecutar un script de Python en un servidor Snowflake Database de Azure

    Si eres nuevo en las capacidades de Python para la versión 3.9.9, hay varias formas de ejecutar un script en un servidor Snowflake Database de Azure. Aquí hay una solución que implica llamar a un script snowflake_conn.py ubicado en otra carpeta de red y pasar argumentos para la base de datos y el esquema.

    Primero, asegúrate de tener instalado snowflake-connector-python. Puedes instalarlo usando pip:

    pip install snowflake-connector-python
    

    A continuación, debes crear el script snowflake_conn.py con el siguiente código:

    import snowflake.connector
    import configparser
    
    def snowflake_connect(database, schema):
        config = configparser.ConfigParser()
        config.read('/ruta/hacia/config.ini')
    
        dsn = dict(config.items('snowflake'))
        account = dsn['account']
        user = dsn['username']
        password = dsn['password']
    
        conn = snowflake.connector.connect(
            user=user,
            password=password,
            account=account,
            database=database,
            schema=schema
        )
        return conn
    

    Ten en cuenta que snowflake_conn.py utiliza el comando configparser.ConfigParser().read() para abrir un archivo config.ini en la misma carpeta que el script snowflake_conn.py. Aquí es donde guardarás la configuración de conexión a la base de datos.

    Aquí tienes un ejemplo del archivo config.ini:

    [snowflake]
    account = NOMBRE_DE_LA_CUENTA
    username = NOMBRE_DE_USUARIO
    password = CONTRASEÑA
    

    Ahora puedes llamar a la función snowflake_connect() desde tu script principal:

    import pandas as pd
    from snowflake_conn import snowflake_connect
    
    # Llama a la función personalizada de conexión
    conn = snowflake_connect('base de datos', 'esquema')
    
    # Obtén el cursor de snowflake.connector.connect.cursor() como sfconn
    cursor = conn.cursor()
    
    qry = 'SELECT * FROM nombre_tabla WHERE 1=1'
    cursor.execute(qry)
    df = cursor.fetch_pandas_all()
    

    Ten en cuenta que necesitas usar la instrucción from snowflake_conn import snowflake_connect para importar la función desde el script snowflake_conn.py. Si el script snowflake_conn.py está ubicado en otra carpeta de red, puedes agregar esa carpeta a sys.path usando la instrucción sys.path.insert() antes de importar el script.

    import sys
    sys.path.insert(0, '\\\\abs\\aquí\\está\\')
    from snowflake_conn import snowflake_connect
    

    Esto te permitirá importar el script snowflake_conn.py desde la ubicación de la carpeta de red.

Comments are closed.