У меня есть база данных SQLite с тремя столбцами, и я пытаюсь использовать подстановку параметров для кортежей на SELECT
строк. Это моя таблица:
conn = sqlite3.connect("SomeDb.sqlite3")
conn.execute("""
CREATE TABLE RoadSegmentDistribution(
Source INTEGER,
Destination INTEGER,
Distribution TEXT
)
""")
Я знаю, как заменить не-кортежами, но я не могу понять, как это сделать с кортежами.
На основании этого ответа , я думал, что мне просто нужно заменить каждое значение в списке кортежей:
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: sub-select возвращает 1 столбец - ожидается 2
Я не могу вставить значения вручную, как в связанном ответе, так как я не знаю что содержит параметр списка. Это означает, что мне нужно сделать что-то вроде ",".join()
в зависимости от длины списка, но я пойму это, когда узнаю, как выполнить замену со списком фиксированной длины.
Как бы Я делаю это?