【问题标题】:Python SQLite3 How to refer to loop in query [duplicate]Python SQLite3如何在查询中引用循环[重复]
【发布时间】:2015-05-01 09:42:45
【问题描述】:

我有一个包含单个股票价格表的 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 个。

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

【问题讨论】:

    标签: python sqlite


    【解决方案1】:

    您忘记将ticker 设为元组:

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

    你也可以把它做成一个列表:

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

    【讨论】:

    • 错误消息中的“4提供”位指的是字符串“ZUMZ”中的四个字符,因为它将参数视为可迭代。
    • @Martijn Pieters - 感谢您添加具体答案,即使它是重复的。为重复道歉,我在搜索时没有找到那个答案。感谢您的帮助。
    • @Cameron -- 感谢您提供更多信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-02
    • 2021-06-30
    • 2012-04-30
    • 2017-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多