При вставке с 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 шт):
В общем случае в 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 (?)