I can't explain how running the same query manually takes 54 seconds, while the same one from a sqlalchemy python program takes more than 10 minutes (RAW query)!
This is the raw query (54 seconds):
update company_holding c
set "issuerRankPortfolio" = sq."rankPortfolio"
from(
SELECT quarter, "idCompany", "issuerCusip", "issuerPercPortfolio",
row_number()
over(
partition by quarter, "idCompany"
order by "issuerPercPortfolio" desc) as "rankPortfolio"
FROM COMPANY_HOLDING where quarter = '2020Q1') as sq
where c."idCompany" = sq."idCompany"
and c."issuerCusip" = sq."issuerCusip"
and c.quarter = sq.quarter"""
This is the code (> 10 minutes):
query2 = f"""update company_holding c set "issuerRankPortfolio" =
sq."rankPortfolio"
from(
SELECT quarter, "idCompany", "issuerCusip", "issuerPercPortfolio",
row_number()
over(partition by quarter, "idCompany" order by
"issuerPercPortfolio" desc) as "rankPortfolio"
FROM COMPANY_HOLDING where quarter = '{propertiesQuarters.value[i]}') as sq
where c."idCompany" = sq."idCompany"
and c."issuerCusip" = sq."issuerCusip"
and c.quarter = sq.quarter"""
db.session.execute(query1)
I printed the value of {propertiesQuarters.value[i]}
and it is '2020Q1'
(double checked on sqlalchemy log).