【问题标题】:How to use Python package sqlite3 'IN'? [duplicate]如何使用 Python 包 sqlite3 'IN'? [复制]
【发布时间】:2018-02-27 15:17:06
【问题描述】:

我想使用以下代码选择几个特定日期的所有数据。

test_date = ('2012-08-04', '2013-08-19')
conn=sqlite3.connect(sqlite_file)
c=conn.cursor()
dat=c.execute("SELECT dat FROM dat_tbl WHERE date IN ? ", test_date)
dat_tuple=dat.fetchall()
conn.close()

失败并显示错误消息

OperationalError: near "?": syntax error

我想知道这里出了什么问题以及如何解决它。谢谢。

【问题讨论】:

    标签: python-3.x sqlite


    【解决方案1】:

    正确的表达方式应该是,

    c.execute("SELECT dat FROM dat_tbl WHERE date IN (?, ?)", (date1, date2))
    

    问号应该用括号括起来。

    不过,你也想consider usingBETWEEN

    更新

    string.join(sequence) 可能会帮助您自动为您的查询注入问号。

    考虑下面,

    >>> ', '.join(['?']*5)
    '?, ?, ?, ?, ?'
    

    因此,

    >>> "SELECT * FROM example WHERE id in ({0})".format(', '.join(['?'] * len([1,3])))
    'SELECT * FROM example WHERE id in (?, ?)'
    

    或者,

    >>> q = "SELECT dat FROM dat_tbl WHERE date IN ({0})".format(', '.join(['?'] * len(test_date)))
    >>> q
    'SELECT dat FROM dat_tbl WHERE date IN (?, ?)'
    

    【讨论】:

    • 如果我有 100 个日期怎么办?除了 100 个问号,还有其他选择吗?
    • 我已经更新了我的答案。我以为你可以自己处理这个。这超出了 sqlite3 的范围 - 但与 python 字符串操作技能密切相关。
    猜你喜欢
    • 2021-08-20
    • 2016-04-06
    • 2020-06-23
    • 1970-01-01
    • 2013-09-09
    • 2011-03-20
    • 2016-07-26
    • 2021-02-05
    • 1970-01-01
    相关资源
    最近更新 更多