При вставке с AUTOINCREMENT ошибка: sqlite3.0perationalError: table ranobes has 2 columns but 1 values were supplied

Создал БД через SQLiteStudio (3.2.1).

CREATE TABLE ranobes (
    ranobe_id INTEGER      PRIMARY KEY AUTOINCREMENT,
    name      STRING (256) 
);

Решил добавить запись. Вычитал, что если у поля стоит AUTOINCREMENT, то самому id писать не надо, само по себе добавится. Просто не нужно в VALUES прописывать ranobe_id.

def add_new_ranobe(self, name):
    with self.connection:
        return self.cursor.execute("INSERT INTO ranobes VALUES (?)", (name,))

Ну и вызвал это дело:

db.add_new_ranobe('Книжка1')

Но получил такую ошибку:

    return self.cursor.execute("INSERT INTO ranobes VALUES (?)", (name,))   
sqlite3.0perationalError: table ranobes has 2 columns but 1 values were supplied

Тогда добавил в VALUES новое значение, id, и в ручную его прописал, теперь запись добавилась, но без учета AUTOINCREMENT.

Что не так?


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

Автор решения: MaxU

В общем случае в SQL команде:

INSERT INTO table_name (col_name_1, col_name_2, col_name_5)
VALUES (value_for_col_1, value_for_col_2, value_for_col_5)

можно указать в какие столбцы мы хотим записать данные (обратите внимание на список столбцов в скобках после имени таблицы). Если не указать список столбцов после имени таблицы, то подразумевается что мы вставляем данные во все столбцы таблицы. Соответственно передав всего одно значение - у нас получается несоответствие - 2 столбца в таблице и всего одно значение передано в VALUES(...).

В вашем случае можно явно указать список столбцов:

INSERT INTO ranobes(name) VALUES (?)
→ Ссылка