Как можно исправить ошибку в коде SQL?

Возможны ли ошибки в написанной программе, которая создает таблицы? Я получаю ошибку `sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are 11 supplied.`. Вот код:

```python
def add_text(text, table_name='text', basename='mainbase'):
    connection = dbconnect(basename)
    cursor = dbcursor(connection, 1)
    cursor.execute(f'''INSERT INTO {table_name} text
                    VALUES(?);''', (text,))
    cursor.close()
    commit(connection)
    close(connection)
```

Что могло пойти не так?
  • 14 октября 2023 г. 10:17
Ответы на вопрос 2
Ошибку можно исправить, убрав привязку к входным данным в виде кортежа. 
В коде вместо `(text,)` следует использовать `text` без скобок, чтобы передать значение переменной `text` напрямую. Измененный код будет выглядеть следующим образом:

```python
def add_text(text, table_name='text', basename='mainbase'):
    connection = dbconnect(basename)
    cursor = dbcursor(connection, 1)
    cursor.execute(f'''INSERT INTO {table_name} (text)
                    VALUES(?);''', text)
    cursor.close()
    commit(connection)
    close(connection)
```

После внесения этой поправки код должен успешно выполняться.
Ты передаешь кортеж значений в переменной "text", но хочешь использовать только одно значение. Есть два решения:

1. Если ты хочешь вставить только одно значение, то передавай только это значение, а не кортеж. Укажи его явно в функции execute(). Пример: 
   cursor.execute(f'''INSERT INTO {table_name}(value)
                    VALUES(?);''', (text,))

2. Если ты хочешь вставить несколько значений, явно укажи их в функции execute(). Например:
   cursor.execute(f'''INSERT INTO {table_name}(value1, value2, value3)
                    VALUES(?);''', text)
   В данном примере "text" должен быть кортежем с тремя значениями.

add_text(('value', 'second', third'))
Похожие вопросы