Python SQLite3如何在查询中引用循环

时间:2015-02-28 19:45:11

标签: python sqlite

我有一个SQLLite3数据库,其中包含一个股票价格表,如下所示:

   Ticker             DateTime   Open   High    Low  Close   Volume
0    ZUMZ  2011-11-01 00:00:00  21.65  23.24  20.74  22.84   558700
1    ZUMZ  2011-11-02 00:00:00  23.33  23.86  22.58  23.03   543200
2    ZUMZ  2011-11-03 00:00:00  23.28  23.74  21.82  22.67   492100
3    ZUMZ  2011-11-04 00:00:00  22.43  22.86  21.87  22.45   267320

我正在尝试循环遍历符号列表并返回相应的数据。

我可以在列表中返回一个符号的正确结果,如下所示:

tickers = ('AA',)
cursor.execute('SELECT * FROM tbl_USELOC_02 WHERE Ticker=?', tickers)
data = cursor.fetchall()
df =  pd.DataFrame(data)
print df

        0                    1          2          3          4          5  \
0      AA  1951-06-11 00:00:00   0.675918   0.682062   0.675918   0.682062   
1      AA  1951-06-12 00:00:00   0.679605   0.686978   0.679605   0.683291   
2      AA  1951-06-13 00:00:00   0.682062   0.684520   0.680834   0.683291   
3      AA  1951-06-14 00:00:00   0.685749   0.700497   0.685749   0.700497   
4      AA  1951-06-15 00:00:00   0.705412   0.710328   0.705412   0.707870   
5      AA  1951-06-18 00:00:00   0.705412   0.710328   0.705412   0.707870 

但是,如果我尝试用循环做同样的事情,那么:

tickers = ['ZUMZ', 'AA']
for ticker in tickers:
    cursor.execute('SELECT * FROM tbl_USELOC_02 WHERE Ticker=?', ticker)
    data = cursor.fetchall()
    df =  pd.DataFrame(data)
    print df

...我收到一条错误消息: ' ProgrammingError:提供的绑定数量不正确。当前语句使用1,并且提供了4个。'

有人能告诉我如何对列表中的项目运行查询吗?

1 个答案:

答案 0 :(得分:1)

你忘了让ticker成为元组:

cursor.execute('SELECT * FROM tbl_USELOC_02 WHERE Ticker=?', (ticker,))

您也可以将其列为一个列表:

cursor.execute('SELECT * FROM tbl_USELOC_02 WHERE Ticker=?', [ticker])