使用pyodbc从2个表中提取数据,使用唯一日期作为参考

时间:2014-01-30 15:49:08

标签: python ms-access pyodbc

我有一个包含2个表的MS Access数据库;第一行包含显示“dd / mm / yyy”,“hh:mm”,“price”的行 - 每行显示下一个增量分钟的数据。基本上是股票指数的日内分价数据。

第二个表包含以下数据; “dd / mm / yyy”,“收盘价”,“波动率” - 波动率使用格式“15.55”定价。每增加一行显示下一个增量日的信息。

所以第一个表的行数会在几分钟内上升,第二个表的行数会在几天内上升。

我想形成一个pyodbc查询,根据日期从第二个表中提取数据并将其引用到第一个表。这样我就可以获得包含以下内容的数据行:  “dd / mm / yy”,“hh:mm”,“price”,“收盘价”,“波动率”。

“收盘价”和“波动率”值随后有希望重复,直到会议记录到第二天,然后他们会更新以显示第二天的价值。

我对编程完全陌生,到目前为止已成功完成了以下工作。我可以单独拉下每个查询(并打印出来,以便我知道我得到了什么)。

我知道下面的输出在日期之后还包含一个额外的“00:00:00” - 不是100%确定如何摆脱它 - 我不认为它至关重要因为日期应该仍然是能够被引用。 (一次一个问题!;))

表一的输出如下:

2005-01-03 00:00:00  17:00  1213.25
2005-01-03 00:00:00  17:01  1213.25
2005-01-03 00:00:00  17:02  1213.75
2005-01-03 00:00:00  17:03  1213.75

表2的输出如下所示:

2005-01-03 00:00:00  1206.25  14.08
2005-01-04 00:00:00  1191.00  13.98
2005-01-05 00:00:00  1183.25  14.09
2005-01-06 00:00:00  1188.25  13.58

到目前为止,这是我的代码:

from math import sqrt
import time
import pyodbc

"""establishes connection to the database and creates "cursors" with which to query data"""

ACCESS_DATABASE_FILE = "C:\\Python27\\Lib\\site-packages\\xy\\Apache         Python\\SandP.accdb"
ODBC_CONN_STR = 'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=%s;' % ACCESS_DATABASE_FILE
cnxn = pyodbc.connect(ODBC_CONN_STR)
cursor1 = cnxn.cursor()
cursor2 = cnxn.cursor()


"""uses cursor1 to pull out distinct rows of data, ordered by distinct date/time"""

cursor1.execute("select distinct [Intraday_values].[Date_], Time_, Close from [Intraday_values] order by [Intraday_values].[Date_]")
row1 = cursor1.fetchall()
for row1 in row1:
print row1[0], row1[1], row1[2]
time.sleep(2)

"""uses cursor2 to pull out settlement prices and volatility data and order by distinct date"""

cursor2.execute("select distinct [Closing_prices].[Date_], Last_price, Volatility from [Closing_prices] order by [Closing_prices].[Date_]")
row2 = cursor2.fetchall()
for row2 in row2:
print row2[0], row2[1], row2[2]
time.sleep(2)

任何帮助或建议都会非常感激,可能会让我免于拉掉我的头发......

1 个答案:

答案 0 :(得分:1)

在我看来,你应该能够通过一个连接两个表的单个查询来做到这一点

cursor1.execute(
    "select distinct iv.[Date_], iv.Time_, iv.Close, cp.Last_price, cp.Volatility " +
    "from [Intraday_values] AS iv INNER JOIN [Closing_prices] AS cp" +
    "    ON cp.[Date_] = iv.[Date_] " +
    "order by iv.[Date_], iv.Time_")
row1 = cursor1.fetchall()
for row1 in row1:
    print row1[0], row1[1], row1[2], row1[3], row1[4]