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.

Error al reabrir la conexión al punto de conexión XMLA de Power BI con Python.

Tengo el siguiente código de Python que funciona bien en la primera ejecución de la función, pero falla en la segunda ejecución.

import adodbapi

def connect_and_print(input_str):
    print("Función comenzando...", input_str)

    conna = adodbapi.connect("""
    Provider=MSOLAP;
    Identity Provider=https://login.microsoftonline.com/common, https://analysis.windows.net/powerbi/api, 929d0ec0-7a41-4b1e-bc7c-b754a28bddcc;
    Data Source=pbiazure://api.powerbi.com;
    Initial Catalog=[dataset_id];
    User Id=[username];
    Password=[pass];
    """)

    # Ejemplo de consulta
    print('Las tablas de tu conexión a la base de datos son:')
    for name in conna.get_table_names():
        # if name == 'TMSCHEMA_ROLES':
        print(name)
    conna.close()

    print("Función terminada", input_str)

# La primera ejecución se conecta y ejecuta sin problemas
connect_and_print("primera ejecución")

# La segunda ejecución falla (Error opening connection to...)
connect_and_print("segunda ejecución")

La segunda ejecución falla después de una larga espera con el siguiente mensaje de error.

OperationalError: (com_error(-2147352567, 'Exception occurred.', (0, 'Provider', None, None, 1240640, -894947614), None), 'Error opening connection to "\nProvider=MSOLAP.8;\nIdentity Provider=https://login.microsoftonline.com/common, https://analysis.windows.net/powerbi/api, 929d0ec0-7a41-4b1e-bc7c-b754a28bddcc;\nData Source=pbiazure://api.powerbi.com;\nInitial Catalog=[dataset_id];\nUser Id=[username];\nPassword=[pass];\n"')

¿Qué necesito cambiar en el código para poder ejecutar este script sin errores?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema parece estar relacionado con que la conexión no se cierra correctamente después del primer paso. Para solucionar este problema, podemos modificar el código para usar un gestor de contexto para manejar la conexión y asegurarnos de que se cierre correctamente después de su uso. Aquí está el código modificado:

    import adodbapi
    
    def connect_and_print(input_str):
        print("Iniciando función...", input_str)
    
        conn_string = """
            Provider=MSOLAP;
            Identity Provider=https://login.microsoftonline.com/common, https://analysis.windows.net/powerbi/api, 929d0ec0-7a41-4b1e-bc7c-b754a28bddcc;
            Data Source=pbiazure://api.powerbi.com;
            Initial Catalog=[dataset_id];
            User Id=[username];
            Password=[pass];
            """
    
        # Usar gestor de contexto para conexión
        with adodbapi.connect(conn_string) as conn:
            # Ejemplo de consulta
            print('Las tablas en su base de datos con están:')
            for name in conn.get_table_names():
                # if name == 'TMSCHEMA_ROLES':
                print(name)
    
        print("Función finalizada", input_str)
    
    # El primer paso se conecta y se ejecuta sin problemas
    connect_and_print("primer paso")
    
    # El segundo paso ahora debería conectarse sin problemas
    connect_and_print("segundo paso")
    

    En esta versión modificada, usamos una instrucción with para manejar la conexión, lo que asegura que la conexión se cierre correctamente después de su uso incluso si se produce una excepción. Esto debería permitir que el script se ejecute sin errores en ejecuciones posteriores.

Comments are closed.