Судя по вашему коду, проблема может возникать по нескольким причинам. Давайте рассмотрим ваши строки кода и возможные проблемы шаг за шагом:
1. **SQL запрос**:
```
await db.execute('INSERT OR IGNORE INTO user (name) VALUES("%s")' % (user_name))
```
Здесь вы используете строковую интерполяцию для формирования SQL-запроса, что может быть небезопасным и привести к SQL-инъекциям. Вместо этого используйте параметры запроса. Например:
```python
await db.execute('INSERT OR IGNORE INTO user (name) VALUES(?)', (user_name,))
```
2. **Отсутствие вызова `await db.commit()`**:
Ваша строка `await db.commit()` не будет работать, если вы случайно вызовете `commit` не на том объекте. Правильный способ:
```python
await db.commit() # Вызываем commit на объекте базы данных
```
3. **Контекстный менеджер `async with`**:
Когда вы используете `async with`, база данных автоматически закрывается после выхода из блока, и `commit` может не получить возможность завершиться. Чтобы это исправить, следует выполнить `commit` перед выходом из контекста:
```python
async with aiosqlite.connect('base.db') as db:
await db.execute('INSERT OR IGNORE INTO user (name) VALUES(?)', (user_name,))
await db.commit() # Здесь commit должен работать корректно
```
4. **Проверка таблицы и данных**:
Убедитесь, что:
- Таблица `user` существует в базе данных и имеет колонку `name`.
- Строка не пустая и не содержит символов, которые могут быть интерпретированы базой данных неправильно.
5. **Логирование и отладка**:
Попробуйте добавить логирование, чтобы убедиться, что данные действительно приходят в функцию:
```python
@start_router.message(Form.name)
async def add_name(message: types.Message):
user_name = message.text.strip()
print(f"Received name: {user_name}") # Логируем имя
async with aiosqlite.connect('base.db') as db:
await db.execute('INSERT OR IGNORE INTO user (name) VALUES(?)', (user_name,))
await db.commit()
await message.answer("Готово")
```
Проверьте эти пункты, и, если проблема не исчезнет, пришлите дополнительные сведения, такие как структуру таблицы и любые дополнительные ошибки или предупреждения, которые вы могли заметить.