Как получить удобоваримый план запроса с помощью sqlalchemy и «SET STATISTICS XML ON» на Microsoft SQL Server в Python

Я использую sqlalchemy и python3 для запроса базы данных на Microsoft SQL Server.

Поскольку у меня нет доступа к SQL Server Management Studio, я прибегаю к использованию SHOWPLAN опций в своих запросах. Я нашел это в ответе здесь: Как получить план выполнения запроса ?

Проблема в том, что результат использования STATISTICS XML ON не удобен для человека. Обычно я использую sqlalchemy для извлечения данных из pandas фреймов данных, поэтому, пожалуйста, простите мое невежество, если я упускаю что-то очевидное, чтобы интерпретировать это более дружелюбно.

Пожалуйста, найдите мой код python3 ниже:

from sqlalchemy import create_engine
import os

database_credentials = config.settings['database_credentials']

# Retrieve database credentials from config
db_name = os.environ.get(database_credentials['db_name'])
db_host = os.environ.get(database_credentials['db_host'])
db_port = os.environ.get(database_credentials['db_port'])
db_id = os.environ.get(database_credentials['db_id'])
db_pwd = os.environ.get(database_credentials['db_pwd'])

# Concatenate strings to create database url
db_engine = create_engine('mssql+pymssql://' + db_id + ':' + db_pwd + '@' + db_host + ':' + db_port + '/' + db_name)

# Connect to database
db_conn = db_engine.connect()

# Example query with SHOW Plan options
query = 'SET STATISTICS XML ON\n SELECT TOP 5 * FROM Table'

# Execute the query 
result = db_engine.execute(query)

Есть ли способ отформатировать result во что-то удобочитаемое для понимания плана запроса?

Спасибо за вашу помощь


person ZeroStack    schedule 30.07.2018    source источник
comment
Ваш результат в настоящее время содержит фактический набор результатов (5 верхних строк из таблицы) и XML для плана, верно? Вы можете попытаться сохранить xml как файл с расширением ".sqlplan" в локальной папке, а затем открыть его оттуда. Будет ли это возможно?   -  person Rigerta    schedule 30.07.2018
comment
@RigertaDemiri Спасибо за ваш комментарий. После использования метода fetchall() для переменной result он находится в списке внутри python. У меня есть несколько вопросов по вашему предложению, как мне сохранить переменную result как .sqlplan в python? Это класс 'sqlalchemy.engine.result.ResultProxy', какой программой вы бы открыли этот файл? Это SQL Server Management Studio? Это программа только для Windows, я бы предпочел что-то программное и на питоне. Я также использую macOS.   -  person ZeroStack    schedule 30.07.2018
comment
Эй, а как его сохранить (или есть ли вообще вариант) я не знаю. Я не работаю с Python, поэтому я спросил вас, возможно ли это. Что касается того, как его открыть, SSMS не является кроссплатформенной, а SQL Operations Studio. Вы можете использовать это на Mac.   -  person Rigerta    schedule 30.07.2018
comment
Если это просто строка в формате XML, которая возвращается из запроса, вы можете проанализировать ее, используя ET.fromstring, а затем сохраните в файл после этот вопрос.   -  person SuperShoot    schedule 30.07.2018