Menu

SQLite CLI: работа с консолью sqlite3

Разбираемся с консолью sqlite3: как открыть базу, выполнять запросы, использовать dot-команды и импортировать или экспортировать данные прямо из терминала.

На этой странице есть исполняемые редакторы: меняйте, запускайте и сразу видите результат.

Что такое sqlite cli

sqlite3 — это официальная консоль sqlite3, которая поставляется вместе с SQLite. Запускаете бинарник, передаёте файл базы — и получаете приглашение, в котором можно выполнять SQL. Ни сервера, ни логина, ни конфигов: только исполняемый файл и файл базы.

Командная строка sqlite3 пригодится, когда нужно быстро заглянуть в базу, прогнать разовый запрос, выгрузить схему или импортировать данные. Это самый быстрый способ покопаться в базе, не написав ни строчки прикладного кода.

$ sqlite3 mydata.db
SQLite version 3.45.0
Enter ".help" for usage hints.
sqlite>

Если файла mydata.db ещё нет, SQLite создаст его сам, как только вы внесёте первое изменение. А если запустить sqlite3 вообще без имени файла, откроется временная база прямо в памяти — после выхода от неё ничего не останется.

Выполнение SQL в консоли sqlite3

Оказавшись внутри shell, пишите SQL и заканчивайте каждый запрос точкой с запятой. Именно её ждёт консоль: нажмёте Enter без точки с запятой — увидите приглашение продолжения ввода, и только.

Точка с запятой — это сигнал «всё, выполняй». Забудешь её — и оболочка просто зависнет с приглашением ...>, ожидая продолжения. Поставь ; на новой строке, чтобы завершить команду.

Dot-команды — это не SQL

Всё, что начинается с точки (.), — это dot-команда, то есть указание самой оболочке, а не движку SQL. Точку с запятой они не требуют и работают только внутри консоли sqlite3.

sqlite> .tables
books

sqlite> .schema books
CREATE TABLE books (
  id INTEGER PRIMARY KEY,
  title TEXT NOT NULL,
  year INTEGER
);

sqlite> .help

Те, что вы будете использовать постоянно:

  • .tables — показать все таблицы в текущей базе данных.
  • .schema [table] — вывести CREATE TABLE для конкретной таблицы или сразу для всех.
  • .databases — список подключённых файлов баз данных.
  • .mode <format> — изменить формат вывода результатов запроса.
  • .headers on — показывать имена столбцов над результатами.
  • .read file.sql — выполнить SQL-файл.
  • .exit или .quit — выйти из консоли.

Полный список покажет .help. Команд там десятки, но в реальной работе вам пригодится от силы десяток.

Делаем вывод читаемым

По умолчанию результаты разделены вертикальной чертой и идут без заголовков — для скриптов сойдёт, а вот глазами читать неудобно. Поправить это можно двумя dot-командами:

sqlite> .headers on
sqlite> .mode column
sqlite> SELECT * FROM books;
id  title        year
--  -----------  ----
1   Dune         1965
2   Neuromancer  1984

Другие полезные режимы:

  • .mode box — рисует таблицу с рамкой из Unicode-символов. Красиво смотрится на скриншотах.
  • .mode csv — значения через запятую, удобно прокидывать в другие утилиты.
  • .mode json — вывод в JSON, по одному объекту на строку.
  • .mode line — каждая колонка на своей строке, выручает, когда строки широкие.

Все настройки сбрасываются при каждом запуске консоли. Чтобы они сохранялись, сложите их в файл ~/.sqlitercsqlite3 подхватит его при старте.

Импорт и экспорт CSV в SQLite

В sqlite cli есть встроенная поддержка CSV. Переключитесь в режим CSV и загрузите файл в таблицу командой .import:

sqlite> .mode csv
sqlite> .import authors.csv authors
sqlite> SELECT * FROM authors LIMIT 3;

Если таблицы ещё нет, .import создаст её, взяв имена столбцов из первой строки. Если таблица уже существует, первая строка считается данными — пока вы не добавите --skip 1.

Чтобы выгрузить данные обратно, перенаправьте вывод в файл:

sqlite> .headers on
sqlite> .mode csv
sqlite> .output books.csv
sqlite> SELECT * FROM books;
sqlite> .output stdout

.output filename перенаправляет вывод всех последующих запросов в указанный файл — и так до тех пор, пока вы не вернёте всё обратно командой .output stdout. Механизм один и тот же, что для экспорта в CSV, что в JSON, что для дампа схемы.

Как выполнить SQL-файл в SQLite

Если запросов больше пары штук, удобнее сохранить их в файл и запустить целиком. Прямо из консоли sqlite3:

sqlite> .read setup.sql

Или прямо из обычного терминала, даже не заходя в саму консоль:

$ sqlite3 mydata.db < setup.sql
$ sqlite3 mydata.db "SELECT count(*) FROM books;"

Второй вариант выполняет один запрос и сразу завершает работу — то, что нужно для shell-скриптов или быстрых проверок. Если нужен форматированный вывод, скомбинируйте его с настройками .mode через флаг -cmd:

$ sqlite3 -header -column mydata.db "SELECT * FROM books;"

Как изучить незнакомую базу данных

Когда вам кидают .db-файл, а что внутри — непонятно, действуйте по такому сценарию:

$ sqlite3 mystery.db
sqlite> .tables
sqlite> .schema
sqlite> .indexes
sqlite> SELECT count(*) FROM some_table;

.schema без аргументов выдаёт все CREATE TABLE, CREATE INDEX и CREATE TRIGGER, какие есть в файле. .indexes показывает индексы по каждой таблице. Пять минут в консоли sqlite3 расскажут о базе больше, чем любой README.

Если нужен полный текстовый снимок, который потом можно развернуть в другом месте, используйте .dump:

sqlite> .output backup.sql
sqlite> .dump
sqlite> .output stdout

Получится SQL-скрипт, который полностью воссоздаёт базу — и схему, и данные, — если его потом скормить обратно sqlite3.

Как выйти из sqlite3

Способа три, все равнозначны:

sqlite> .exit
sqlite> .quit

Либо нажмите Ctrl+D на macOS и Linux (Ctrl+Z, а затем Enter на Windows). Все изменения уже сохранены — SQLite фиксирует каждый запрос сразу после его выполнения, если только вы явно не открыли транзакцию.

Дальше: GUI-инструменты для SQLite

Консоль sqlite3 — это быстро и удобно для скриптов, но иногда хочется просто покликать по таблицам, отсортировать столбцы и поправить строки в визуальном интерфейсе. Для SQLite есть несколько достойных GUI-инструментов — о них поговорим на следующей странице.

Часто задаваемые вопросы

Как открыть базу данных через SQLite CLI?

В терминале выполните sqlite3 mydata.db. Если файла ещё нет, SQLite создаст его в момент, когда вы добавите первую таблицу. Если запустить просто sqlite3 без имени файла, откроется временная база в памяти — она исчезнет, как только вы выйдете из консоли.

Как выйти из консоли sqlite3?

Введите .exit или .quit и нажмите Enter — обе команды работают одинаково. На большинстве систем сработает и Ctrl+D (а в Windows — Ctrl+Z, затем Enter).

Что такое dot-команды в SQLite?

Это встроенные команды самой консоли, которые начинаются с точки: .tables, .schema, .mode, .import и так далее. Это не SQL, а инструкции для CLI, поэтому точка с запятой в конце им не нужна — и работают они только внутри оболочки sqlite3.

Как выполнить SQL-файл в SQLite CLI?

Прямо из консоли — командой .read filename.sql. Либо снаружи, через перенаправление: sqlite3 mydata.db < filename.sql. В обоих случаях запросы из файла выполнятся по порядку в открытой базе.

Coddy programming languages illustration

Учитесь программировать с Coddy

НАЧАТЬ