【发布时间】:2020-06-23 19:36:24
【问题描述】:
我有一个包含三列的 SQLite 数据库,我正在尝试使用参数替换元组到 SELECT 行。这是我的桌子:
conn = sqlite3.connect("SomeDb.sqlite3")
conn.execute("""
CREATE TABLE RoadSegmentDistribution(
Source INTEGER,
Destination INTEGER,
Distribution TEXT
)
""")
我知道如何用非元组替换,但我不知道如何用元组替换。
基于this answer,我认为我只需替换元组列表中的每个值:
for e in conn.execute("""
SELECT *
FROM RoadSegmentDistribution
WHERE (
Source, Destination
) IN (VALUES (?,?), (?,?), (?,?), (?,?), (?,?))
""",
[(1, 2),(2, 3),(4, 5),(6, 7),(8, 9)]
):
print(e)
然后我得到错误
ProgrammingError:提供的绑定数量不正确。当前语句使用 10,提供了 5 个。
显然这意味着每个元组只需要一个问号,对吧?:
for e in conn.execute("""
SELECT *
FROM RoadSegmentDistribution
WHERE (
Source, Destination
) IN (VALUES (?), (?), (?), (?), (?))
""",
[(1, 2),(2, 3),(4, 5),(6, 7),(8, 9)]
):
print(e)
然后我得到这个错误:
OperationalError:子选择返回 1 列 - 预期为 2
我不能像在链接的答案中那样手动插入值,因为我不知道列表参数包含什么。这意味着我需要根据列表的长度来做某种",".join(),但是一旦我知道如何用固定长度的列表进行替换,我就会弄清楚这一点。
我该怎么做?
【问题讨论】:
-
只使用一个问号“IN (VALUES?)”怎么样?
-
@z44.nelther 不幸的是,这给了我一个
OperationalError: near "?": syntax error
标签: python sql python-3.x sqlite substitution