需要更高效的方式从数据库中提取多个日期系列

2024-06-07 19:27:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据库表,其中包括TRADE\u DATE、CURRVAL和ITEM字段。我首先有两个数组/列表:arrvar(字符串)、dates(日期)。arrVars中的每个字符串表示一个项目,我需要为其检索每个交易日的货币。我是Python新手,当然也不是数据库方面的专家,我确信有一些方法可以加快我的代码速度

第一部分只是从我的第一个db连接创建日期列表。我只是遍历每一行并将其附加到日期列表中。有更好的办法吗

i = 0
for row in cursor.fetchall():
    dates.append(row[0])
    i+=1

其次,我循环遍历arrvals中的每个项目,然后循环遍历日期中的每个TRADE\u DATE,以创建每个CURRVALs数组,并将数组放入矩阵中。这太慢了,所以我也希望有更好的方法

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)

谢谢你


Tags: 字符串in数据库列表fordate数组item
1条回答
网友
1楼 · 发布于 2024-06-07 19:27:27

对于第一点,您可能希望执行以下操作:

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))

在获取值时,您必须执行一些逻辑,以便将currval列表转换为矩阵,如果您需要帮助,请告诉我

顺便问一下,我们这里谈的是多少个项目/日期

相关问题 更多 >

    热门问题