Как передать переменную в метод DELETE из SQLite DB - Python [duplicate]

Для внутреннего соединения во всех столбцах вы также можете использовать fintersect из data.table -пакет или intersect из dplyr -пакета в качестве альтернатив merge без указания by -колонков. это даст строки, которые равны между двумя кадрами данных:

merge(df1, df2)
#   V1 V2
# 1  B  2
# 2  C  3
dplyr::intersect(df1, df2)
#   V1 V2
# 1  B  2
# 2  C  3
data.table::fintersect(setDT(df1), setDT(df2))
#    V1 V2
# 1:  B  2
# 2:  C  3

Пример данных:

df1 <- data.frame(V1 = LETTERS[1:4], V2 = 1:4)
df2 <- data.frame(V1 = LETTERS[2:3], V2 = 2:3)
101
задан Martijn Pieters 31 May 2014 в 09:53
поделиться

1 ответ

Вам нужно пройти в последовательности, но вы забыли запятую, чтобы сделать ваши параметры кортежем:

cursor.execute('INSERT INTO images VALUES(?)', (img,))

Без запятой (img) - это просто сгруппированное выражение, а не кортеж, и, следовательно, строка img рассматривается как входная последовательность. Если эта строка имеет длину 74 символа, тогда Python видит это как 74 отдельных значения привязки, каждый из которых длинный.

>>> len(img)
74
>>> len((img,))
1

Если вам становится легче читать, вы также можете использовать литерал списка:

cursor.execute('INSERT INTO images VALUES(?)', [img])
223
ответ дан Martijn Pieters 21 August 2018 в 14:52
поделиться
  • 1
    У нас много продвинутых кодеров, которые допустили эту ошибку, поэтому не нужно чувствовать себя глупо. :) – MrGumble 31 May 2013 в 13:07
  • 2
    Это тоже меня укусило. Если "продвинутые кодеры" обманываются этим, это означает, что это неинтуитивно. ИМХО было бы более естественно, если execute () взял одно значение вместо однозначного кортежа, если есть только один? в запросе. Во всяком случае, спасибо за подсказку! – Laryx Decidua 14 August 2013 в 13:24
  • 3
    @ user465139: Оператор % на str делает такую ​​магию - он рассматривает кортеж как несколько значений, но str (или любой другой тип итерации) как одно значение. Но это вызывает путаницу гораздо чаще, чем решает ее, поэтому почти ничто в stdlib не пытается использовать эту магию. – abarnert 16 January 2014 в 23:50
Другие вопросы по тегам:

Похожие вопросы: