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?
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:
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.