Я использую ноутбук Юпитера с Python 3 и подключаюсь к базе данных SQL-сервера.Я использую pyodbc версии 4.0.22 для подключения к базе данных.
Моя цель - сохранить результаты SQL в кадре данных pandas, но запрос был таким медленным.
Вот код:
import pyodbc
cnxn = pyodbc.connect("DSN=ISTPRD02;"
"Trusted_Connection=yes;")
ontem = '20180521'
query = "SELECT LOJA, COUNT(DISTINCT RA) FROM VENDAS_CONTRATO(NOLOCK) WHERE DT_RETIRADA_RA = '" + ontem + "' AND SITUACAO IN ('ABERTO', 'FECHADO') GROUP BY LOJA"
start = time.time()
ra_ontem = pd.read_sql_query(query, cnxn)
end = time.time()
print("Tempo: ", end - start)
Темп: 26.379971981048584
Так как это заняло много времени, я наблюдал за сервером базы данных, и для выполнения запроса на сервере требуется около 3 секунд, как вы можетесм. ниже:
query = "SELECT LOJA, COUNT(DISTINCT RA) FROM VENDAS_CONTRATO(NOLOCK) WHERE DT_RETIRADA_RA = '" + ontem + "' AND SITUACAO IN ('ABERTO', 'FECHADO') GROUP BY LOJA"
start = time.time()
crsr = cnxn.cursor()
crsr.execute(query)
end = time.time()
print("Tempo: ", end - start)
Темп: 3.7947773933410645
start = time.time()
crsr.fetchone()
end = time.time()
print("Tempo: ", end - start)
Темп: 0.2396855354309082
start = time.time()
crsr.fetchall()
end = time.time()
print("Tempo: ", end - start)
Темп: 23.67447066307068
Так что это кажетсяпроблема локальная, когда данные уже получены с сервера базы данных и похоже, что код pyhton работает медленно, когда имеешь дело с данными.
Но у меня только 892 строки!
ra_ontem.shape
(189, 2)
Так что мой вопрос, как я могу сделать это быстрее и загрузить результаты в пандыДатафрейм?
Спасибо