[英]Need more efficient way to retrieve several dated series from a DB
我有一個數據庫表,其中包含TRADE_DATE,CURRVAL和ITEM字段。 我首先有兩個數組/列表:arrVars(字符串),日期(日期)。 arrVars中的每個字符串都代表一個項目,我需要為它檢索日期中每個TRADE_DATE的CURRVAL。 我是Python的新手,我當然也不具備數據庫專家,而且我敢肯定,有很多方法可以加快我的代碼的速度。
第一部分只是從我的第一個數據庫連接創建日期列表。 我只是遍歷每一行並將其添加到日期列表中。 有沒有更好的辦法?
i = 0
for row in cursor.fetchall():
dates.append(row[0])
i+=1
其次,我循環遍歷arrVars中的每個ITEM,然后循環遍歷日期中的每個TRADE_DATE以創建每個CURRVAL數組,並將這些數組放入矩陣中。 這真是太慢了,所以我希望還有更好的方法。
M = []
dtFormat = '%Y/%m/%d'
for item in arrVars:
tmp = []
for dt in dates:
strSQL = "SELECT CURRVAL FROM tblGanData WHERE ITEM = '" + item + "' AND TRADE_DATE = #" + dt.strftime(dtFormat) + "#"
cursor.execute(strSQL)
tmp.append(cursor.fetchone()[0])
M.append(tmp)
謝謝!!
首先,您可能需要執行以下操作:
dates = [row[0] for row in cursor.fetchall()]
但是我對查看您用於該游標的SQL語句非常感興趣。
select some_date from my_table
將會比
select * from my_table
(快多少取決於您返回的行數以及客戶端和服務器之間的網絡連接速度。)
在第二部分中,您將為每個“項目/日期”組合執行一個查詢(包含全部往返費用)。
所以也許像這樣
# build a list of all the dates
dates_str = ",".join(['#' + dt.strftime(dtFormat) + "#"
for dt in dates])
# build a list of all the items
items_str = ",".join(["'" + item + "'" for item in items])
# run one SQL query that gets everything
cursor.execute("""
select item, trade_date, currval
from tblGanData
where item in (%s)
and trade_date in (%s)
order by item, trade_date
""" % (items_str, dates_str))
在獲取值以將曲線表列表轉換為矩陣時,您將必須執行一些邏輯,讓我知道是否需要幫助。
PS我們在這里談論多少個項目/日期?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.