У меня есть база данных Postgre, которую я обновляю каждый день, чтобы хранить биржевые тикеры и цены. Я использую эту базу данных для загрузки цен на акции для разных дат в сценарии, над которым я работаю. Тем не менее, я заметил, что запросы операторов SQL занимают значительно больше времени для выполнения при выполнении в Python по сравнению с командной строкой psql.Улучшение производительности нескольких SQL-запросов в python
Кто-нибудь знает, что я могу сделать, чтобы улучшить производительность кода ниже? Я попытался объединить SQL-запросы в один длинный запрос, но он, похоже, не работает. Спасибо!
for ticker in sectorStocks:
# Pull closing price for startDate
with con:
cur = con.cursor()
cur.execute("SELECT close_price FROM dailyprices WHERE ticker=%s AND price_date=%s", (ticker,startDate))
tickerStartRaw = cur.fetchone()
# Check to ensure there is market data for the date used
while not tickerStartRaw:
startDate = startDate - BDay(1)
with con:
cur = con.cursor()
cur.execute("SELECT close_price FROM dailyprices WHERE ticker=%s AND price_date=%s", (ticker,startDate))
tickerStartRaw = cur.fetchone()
tickerStartPrice = tickerStartRaw[0]
# Pull closing price for endDate
with con:
cur = con.cursor()
cur.execute("SELECT close_price FROM dailyprices WHERE ticker=%s AND price_date=%s", (ticker,endDate))
tickerEndRaw = cur.fetchone()
# Check to ensure there is market data for the date used
while not tickerEndRaw:
endDate = endDate - BDay(1)
with con:
cur = con.cursor()
cur.execute("SELECT close_price FROM dailyprices WHERE ticker=%s AND price_date=%s", (ticker,endDate))
tickerEndRaw = cur.fetchone()
tickerEndPrice = tickerEndRaw[0]
Код выглядит прочным. Пробовали ли вы использовать модуль 'timeit' для диагностики того, какая часть кода вызывает задержку? EDIT: Я просто заметил цикл 'for' в верхней части кода. Насколько велик «сектор»? Может быть, накладные расходы на открытие и закрытие всех этих соединений замедляют вас. – James
Убедитесь, что есть указатель на столбцы 'ticker' и' price_date'. – MrEricSir
В принципе, вам нужно избавиться от трех циклов в вашем коде. Для получения более подробной справки вам необходимо предоставить структуру таблицы, некоторые примерные данные и желаемый результат. –