База данных SQLite — это просто файл
Если вы работали с MySQL или Postgres, то привыкли запускать CREATE DATABASE myapp; и доверять серверу всю возню по созданию новой базы где-то у себя «под капотом». В SQLite всё иначе. Сервера нет. Команды CREATE DATABASE тоже нет. База данных — это обычный файл на диске, как правило с расширением .db, .sqlite или .sqlite3, но расширение тут условность и ничего не решает.
Чтобы создать базу данных SQLite, достаточно запустить утилиту sqlite3, передав ей имя ещё не существующего файла:
sqlite3 mydata.db
Вот и всё. Если mydata.db ещё не существует, SQLite создаст файл. Если существует — просто откроет. Команда одна и та же в обоих случаях. По сути, это ближе к «открыть документ», чем к «поднять сервер БД».
Файл не появится, пока вы что-нибудь не запишете
Вот момент, на котором многие спотыкаются. Запустите команду выше, наберите .quit и загляните в каталог. Файла там нет.
SQLite ленивый. Он не создаёт файл на диске, пока туда нечего записывать. Как только вы создадите таблицу или закоммитите данные — файл тут же появится:
Теперь файл mydata.db физически появился на диске. До этой первой записи «база» существует только в памяти подключения. Иногда это сбивает с толку, а иногда даже на руку — если сессия оборвётся, никаких следов не останется.
Как создать базу данных SQLite через командную строку
Полный сценарий с нуля в терминале:
$ sqlite3 mydata.db
SQLite version 3.45.0
Enter ".help" for usage hints.
sqlite> CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT);
sqlite> .databases
main: /home/you/mydata.db r/w
sqlite> .quit
Несколько полезных команд CLI, пока вы внутри:
.databases— показать подключённые базы и пути к их файлам..tables— список таблиц в текущей базе..schema— вывести инструкцииCREATE TABLEдля всех объектов..quit— выйти.
Если вы уже запустили sqlite3 без аргументов (то есть без открытого файла), подключить файл можно командой .open:
sqlite> .open mydata.db
То же правило: если файла нет — он создаётся, если есть — просто открывается.
"If Not Exists" работает из коробки
Типичное беспокойство тех, кто пришёл из других СУБД: а что если файл уже существует? Он не затрётся? Не затрётся. Открытие существующего файла — это просто открытие, ничего не перезаписывается. Ближайший аналог CREATE DATABASE IF NOT EXISTS — это банальное открытие файла. SQLite обрабатывает оба случая одной и той же командой.
Если же вам нужно начать с чистого листа, сначала удалите файл:
rm mydata.db
sqlite3 mydata.db
Только убедись, что ты этого действительно хочешь. Откатить уже не получится, и никакой админки, чтобы вытащить файл обратно, тоже нет.
Как создать базу данных SQLite из Python
В реальной работе ты редко будешь сидеть в CLI — обычно базы создаются прямо из кода приложения. В Python для этого уже есть модуль sqlite3 в стандартной библиотеке, ставить ничего не надо:
sqlite3.connect("mydata.db") работает по тому же принципу, что и CLI: если файла нет — создаёт, если есть — открывает. Все остальные обёртки в других языках (better-sqlite3 для Node, драйвер database/sql в Go, rusqlite в Rust и так далее) ведут себя точно так же — под капотом у них одна и та же C-библиотека.
Маленький бонус именно для Python: если передать ":memory:" вместо пути, получите базу sqlite в памяти — она живёт только в RAM и исчезает, как только закрывается соединение. Об этом подробнее на следующей странице.
Где хранить файл базы данных?
Раз база — это просто файл, вопрос «куда его положить?» вполне законный. Несколько практических ориентиров:
- Для приложения: где-то в пользовательской директории данных или в рабочей папке вашего приложения. Не кладите файл рядом с исполняемым — на многих системах туда нельзя писать.
- Для проекта: в корне репозитория или в папке
data/. Если база хранит локальное состояние, добавьте её в.gitignore— коммитить бинарную базу в Git почти всегда плохая идея. - Для тестов: используйте
:memory:или временный файл. Быстро и без мусора после себя.
Не забывайте и про права доступа. У пользователя, от имени которого запущен процесс, должны быть права на чтение и запись как для самого файла, так и для родительской директории — во время записи SQLite создаёт рядом с базой lock-файлы.
Быстрая проверка, что всё работает
Чтобы убедиться, что вся цепочка работает от начала и до конца:
В ответе должно прийти две строки. Если всё сработало — файл базы существует, схема внутри него, данные читаются. Вот и вся история про «создание базы данных» в SQLite: ни сервера, ни пользователей, ни таблицы прав. Просто файл.
Дальше: базы данных в памяти
Тот же самый вызов sqlite3.connect(...), который создаёт файл на диске, при определённом аргументе создаёт базу, которая вообще не касается диска. SQLite база данных в памяти — это самый быстрый способ гонять тесты, прикидывать схему или держать временные данные. Об этом поговорим дальше.
Часто задаваемые вопросы
Как создать базу данных в SQLite?
Достаточно выполнить в терминале sqlite3 mydata.db. Если файла mydata.db ещё нет — SQLite создаст его, если есть — просто откроет. Отдельной команды CREATE DATABASE тут нет: база данных и есть этот файл.
Есть ли в SQLite команда CREATE DATABASE?
Нет. В отличие от MySQL или PostgreSQL, в SQLite нет SQL-оператора CREATE DATABASE. База создаётся автоматически в тот момент, когда вы указываете утилите sqlite3 (или, например, модулю sqlite3 из Python) имя несуществующего файла.
Почему файл новой базы SQLite пустой или его вообще нет?
SQLite ленивый — он не пишет файл на диск, пока вы не создадите первую таблицу или не зафиксируете транзакцию. Если просто запустить sqlite3 mydata.db и сразу выйти, никакого файла не появится. Создайте таблицу или выполните .databases — и файл материализуется.
Как создать базу SQLite из Python?
Подключите встроенный модуль sqlite3 и вызовите sqlite3.connect('mydata.db'). Если файла нет, он будет создан автоматически. А если передать ':memory:' вместо пути, получите временную базу прямо в оперативной памяти.