Как исправить проблему с добавлением данных, введенных пользователями через телеграмм-бот, в базу данных SQLite?

Как исключить ошибку `sqlite3.OperationalError: no such column: ilya`, возникающую при попытке вставки данных в базу данных с помощью команды `cur.execute(f'INSERT INTO result(name) VALUES ({data["Name"]})')? Вот часть кода, где вставляются данные:

```python
cur.execute(f'INSERT INTO result(name) VALUES ({data["Name"]})')
```
  • 18 июля 2024 г. 5:52
Ответы на вопрос 3
Чтобы исправить проблему с добавлением данных в базу данных SQLite, необходимо правильно писать команду SQL для вставки данных. Ошибка `sqlite3.OperationalError: no such column: ilya` указывает на то, что в SQL-запросе используется неправильный синтаксис или отсутствует обязательная колонка в таблице.

В вашем случае, чтобы избежать этой ошибки, необходимо использовать параметризированные запросы для вставки данных. Вместо вставки данных напрямую в строку SQL, лучше использовать параметры. Например:

```python
cur.execute('INSERT INTO result(name) VALUES (?)', (data["Name"],))
```

Здесь `?` является заполнителем для параметра, который будет подставлен в запрос. Передавайте данные как параметры в метод `execute()` для того, чтобы избежать возможных ошибок и защититься от SQL-инъекций.

Использование параметризированных запросов не только упрощает работу с базой данных, но и обеспечивает безопасность вашего приложения.
INSERT INTO result(name) VALUES (ilya) 
Вы пытаетесь вставить в колонку name значение из колонки ilya. Строки должны быть в кавычках.
Для защиты от SQL-инъекции нужно использовать плейсхолдеры
- cur.execute(f'INSERT INTO result(name) VALUES ({data["Name"]})')
- db.commit()
- cur.execute(f'INSERT INTO result(name) VALUES({data['School_class']})')
+ cur.execute('INSERT INTO result(name, class) VALUES (?, ?)', (data["Name"], data['School_class']))
cur.execute(f'INSERT INTO result(name) VALUES ({data["Name"]})')

Так нельзя подставлять параметры в SQL-запрос по ряду причин. Ваша ошибка из-за отсутствия кавычек при такой подстановке, но даже если поставить кавычки в форматную строку так делать нельзя. Найдите любой простой отдельный работающий пример вставки в бд с передачей параметра и посмотрите. Таких в сети миллион. Можно ещё погуглить как правильно передавать параметры в sql-запос. а как неправильно и почему.
Похожие вопросы