<!-- Bothost docs | HTML: https://bothost.ru/docs/sqlite-terminal | Markdown: https://bothost.ru/docs/sqlite-terminal.md | Index: https://bothost.ru/llms.txt -->

# Работа с SQLite базами данных через терминал дашборда

## ✅ Возможности

В дашборде есть встроенный терминал, который позволяет выполнять команды внутри контейнера бота. Через этот терминал можно работать с SQLite базами данных, используя утилиту `sqlite3`.

![Web Terminal с примером команды SQLite](/docs/images/sqlite_terminal_console_1.png "Терминал дашборда с примером команды sqlite3")

*Пример интерфейса терминала дашборда с доступными командами и примером работы с SQLite*



## 📍 Расположение баз данных

Базы данных ботов хранятся в папке `/app/data/` внутри контейнера. Эта папка сохраняется между перезапусками контейнера.

## 🔧 Доступные команды

### Проверка наличия sqlite3

```bash
sqlite3 --version
```

### Просмотр списка баз данных

```bash
ls -la /app/data/*.db
```

или

```bash
find /app/data -name "*.db" -o -name "*.sqlite" -o -name "*.sqlite3"
```

### Просмотр структуры базы данных

```bash
sqlite3 /app/data/bot.db ".schema"
```

### Просмотр списка таблиц

```bash
sqlite3 /app/data/bot.db ".tables"
```

### Выполнение SELECT запроса

```bash
sqlite3 /app/data/bot.db "SELECT * FROM users LIMIT 10;"
```

### Добавление строки в таблицу

```bash
sqlite3 /app/data/bot.db "INSERT INTO users (name, email) VALUES ('Иван', 'ivan@example.com');"
```

### Обновление данных

```bash
sqlite3 /app/data/bot.db "UPDATE users SET email='new@example.com' WHERE id=1;"
```

### Удаление строки

```bash
sqlite3 /app/data/bot.db "DELETE FROM users WHERE id=1;"
```

### Интерактивный режим

Для более сложных операций можно использовать интерактивный режим:

```bash
sqlite3 /app/data/bot.db
```

В интерактивном режиме доступны команды:
- `.tables` - список таблиц
- `.schema` - структура базы
- `.schema users` - структура конкретной таблицы
- `.mode column` - форматирование вывода в виде таблицы
- `.headers on` - показывать заголовки колонок
- `.quit` или `.exit` - выход

### Экспорт данных в CSV

```bash
sqlite3 /app/data/bot.db ".mode csv" ".headers on" "SELECT * FROM users;" > /app/data/users_export.csv
```

### Импорт данных из SQL файла

```bash
sqlite3 /app/data/bot.db < /app/data/import.sql
```

## ⚠️ Ограничения терминала

Терминал блокирует некоторые опасные команды и разделители:
- Запрещены: `;`, `||`, `&&`, `` ` ``, `$()`
- Команды должны быть в кавычках, если содержат пробелы
- Используйте простые команды без сложных конструкций

## 📝 Примеры использования

### Пример 1: Добавление тестового пользователя

```bash
sqlite3 /app/data/bot.db "INSERT INTO users (username, created_at) VALUES ('test_user', datetime('now'));"
```

### Пример 2: Просмотр последних 5 записей

```bash
sqlite3 /app/data/bot.db "SELECT * FROM users ORDER BY id DESC LIMIT 5;"
```

### Пример 3: Подсчет записей

```bash
sqlite3 /app/data/bot.db "SELECT COUNT(*) FROM users;"
```

### Пример 4: Резервная копия базы

```bash
cp /app/data/bot.db /app/data/bot.db.backup
```

### Пример 5: Восстановление из резервной копии

```bash
cp /app/data/bot.db.backup /app/data/bot.db
```

## 🔒 Безопасность

- Все команды выполняются внутри контейнера бота
- Изменения в базе данных сохраняются в volume
- Рекомендуется делать резервные копии перед важными операциями
- Используйте транзакции для критичных операций (через интерактивный режим)

## 💡 Советы

1. **Проверяйте путь к базе**: Убедитесь, что база находится в `/app/data/`, а не в `/app/`
2. **Делайте резервные копии**: Перед изменением данных создавайте копию базы
3. **Используйте интерактивный режим**: Для сложных операций удобнее использовать интерактивный режим
4. **Проверяйте результат**: После INSERT/UPDATE проверяйте изменения через SELECT

## 🐛 Решение проблем

### Команда sqlite3 не найдена

Если команда `sqlite3` не найдена, это означает, что контейнер был создан до обновления. Пересоберите контейнер бота через панель управления.

### Ошибка "database is locked"

База данных заблокирована другим процессом. Убедитесь, что бот не запущен или остановите его перед выполнением операций.

### Ошибка "no such table"

Проверьте правильность имени таблицы:
```bash
sqlite3 /app/data/bot.db ".tables"
```


