我有一个包含 2 个表的 MS Access 数据库;第一行包含显示“dd/mm/yyy”、“hh:mm”、“price”的行——每行显示下一增量分钟的数据。基本上,股票指数的盘中分钟价格数据。
第二个表包含以下数据; “dd/mm/yyy”、“收盘价”、“波动率”——例如使用“15.55”格式定价的波动率。每个额外的行显示下一个增量日的信息。
所以第一个表的行数在几分钟内增加,第二个表的行数在几天内增加。
我想形成一个 pyodbc 查询,根据日期从第二个表中提取数据并将其引用到第一个表。这样我就可以获得包含以下内容的数据行: “dd/mm/yy”,“hh:mm”,“价格”,“收盘价”,“波动率”。
然后“收盘价”和“波动率”值有望重复出现,直到分钟数进入第二天,然后它们将更新以显示第二天的值。
我对编程完全陌生,到目前为止已经成功完成了以下工作。我可以单独提取每个查询(并打印它们,这样我就知道我得到了什么)。
我知道下面的输出在日期之后包含一个额外的“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)
如有任何帮助或建议,我们将不胜感激,这可能会让我免于拔掉剩下的头发……
请您参考如下方法:
在我看来,您应该能够通过 JOIN 两个表的单个查询来做到这一点
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]
