Python s DB-API , стандарт, для которого был разработан модуль вашей базы данных, указывает, что в качестве аргумента параметров для .execute()
должна быть указана «последовательность или отображение».
Ваш аргумент был строкой, поэтому то, что было помещено в запрос, не было понято базой данных.
Требуется преобразовать второй (второй) аргумент в .execute()
в последовательность, а обычная последовательность - это кортеж. Иногда людей удивляет, что кортеж не сформирован путем заключения значения в скобки / скобки, и что конечная запятая необходима. Обратите внимание, что если бы вы вставляли несколько значений, вы бы вообще не столкнулись с этой проблемой.
Итак, что нужно:
self.curr.execute("""
INSERT IGNORE INTO test (
`name`
)
VALUES (%s)
""", (
item['test'],
# ^ trailing comma!
)
)
Существует по крайней мере один модуль базы данных, который позволяет только одно значение, которое будет использоваться (т.е. не последовательность) - в отступлении от спецификаций DB-API; что отбросило меня в прошлое.