Menu

SQLite: как создать базу данных (.db файл)

Разбираемся, как создать базу данных SQLite: модель «база = файл», команда sqlite3 и почему здесь нет CREATE DATABASE.

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

База данных 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:' вместо пути, получите временную базу прямо в оперативной памяти.

Coddy programming languages illustration

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

НАЧАТЬ