TypeError: not enough arguments for format string

Пытаюсь сделать запись в бд таким образом

query = 'INSERT INTO users (ip, user, pass) VALUES (%s, %s, %s)'
val = ("1.1.1.1", "user", "pass")
cursor.executemany(query, val)

Но при запуске такая ошибка

я вроде указал, что данные являются строкой, что я делаю не правильно?


Ответы (1 шт):

Автор решения: Андрей Коробейников

Как верно заметили в комментариях проблема состоит лишь в том что вы используете executemany - данный метод использует для выполнения сразу нескольких запросов и подразумевает что в val у вас будет что-то вроде

val = [("1.1.1.1", "user", "pass"),
       ("1.1.1.2", "user2", "pass"),
       ("1.1.1.3", "user3", "pass"),
       ...]

таким образом, что бы заработал ваш пример сделайте или

query = 'INSERT INTO users (ip, user, pass) VALUES (%s, %s, %s)'
val = [("1.1.1.1", "user", "pass"),]
cursor.executemany(query, val)

или

query = 'INSERT INTO users (ip, user, pass) VALUES (%s, %s, %s)'
val = ("1.1.1.1", "user", "pass")
cursor.execute(query, val)

Здесь очень подробно и красиво рассмотрены все ньюансы использования данных методов

→ Ссылка