#Что означает ошибка
sqlite3.OperationalError: no such table: users
Ошибка SQLite «no such table» означает, что запрос ссылается на таблицу, которой нет в открытом файле базы. Чаще всего приложение открыло другой файл (относительный путь, другая рабочая папка) или миграции не выполнены.
Проверьте, какой файл фактически открыт и какие таблицы в нём есть.
Многие случаи — это пустой файл, созданный автоматически при неверном пути.
Ошибка значит, что в открытой базе нет такой таблицы: открыт другой файл, миграции не выполнены, таблица названа иначе или база создалась пустой из-за неверного пути.
#Причины и решения
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Открыт не тот файл базы | Открыт новый пустой файл вместо нужной рабочей базы | Сравните абсолютный путь, размер и конфигурацию запуска. |
| Не выполнены миграции | Ожидаемая схема не была создана | Запустите штатные миграции проекта на копии, затем согласованно. |
| Опечатка в имени | Таблица находится в другой ATTACH-базе или временная | Проверьте соединение, ATTACH и действующую схему. |
| Таблица в другой базе (attach) | Название таблицы отличается от ожидаемого | Сверьте sqlite_schema и SQL приложения. |
#Пошаговое решение
- Проверьте путь и размер файлаОпределите, какую именно базу открывает приложение: посмотрите строку подключения в конфигурации, значение переменных окружения или путь, формируемый в коде. Запишите абсолютный путь, текущий каталог запуска и размер файла; относительный
data.dbзависит от того, где запущена служба. В Linux выполнитеls -l /полный/путь/к/app.db; если файла нет, сначала проверьте, не создала ли библиотека SQLite новую пустую базу по неверному пути. Не создавайте таблицу в таком файле до сверки с рабочей базой. - Откройте базу в sqlite3В терминале на компьютере с правом читать базу выполните
sqlite3 /полный/путь/к/app.db '.tables'— подставьте фактический путь; предварительно сделайте резервную копию или используйте режим чтения, чтобы не изменять базу случайно. Если отсутствует ожидаемая таблица, выполните.schemaдля просмотра схемы и убедитесь, что открыта верная версия базы. Помните: запуск sqlite3 с ошибочным путём может создать новую пустую базу, поэтому перед открытием проверьте наличие и размер файла.Linux · Терминал (Bash)КомандаСписок таблиц в базе.sqlite3 database.sqlite ".tables" - Сверьте имя таблицыСверьте имя таблицы из SQL с
.tablesи определением CREATE TABLE: при ошибкеno such table: usersзапрос кuserили временная таблица другого соединения не подходят. Учитывайте схему подключенияATTACH, виртуальные таблицы и таблицы из расширений — они могут существовать только в определённом соединении. Если у имени есть префикс, исправьте SQL на реальное имя и повторите запрос на тестовой копии; не переименовывайте работающие таблицы без проверки зависимостей. - Запустите миграцииЕсли это ожидаемая новая установка, выполните только официальные миграции своего проекта, предварительно сделав
.backupи проверив версию схемы. Найдите в исходном проекте команду миграции и историю применённых изменений; в рабочем окружении запуск требует разрешения администратора и должен быть испытан на копии. Не копируйте произвольныйCREATE TABLEиз интернета: структура может иметь ключи, индексы, триггеры и связи, нужные приложению. После миграции повторите.tablesи исходный SQL-запрос. - Проверьте права и окружениеЕсли таблица есть в одной среде, но отсутствует при запуске сайта/контейнера, посмотрите, под какой учётной записью работает процесс и где смонтирован том Docker. Сверьте путь внутри контейнера с файлом на хосте и проверьте журналы ошибок; разные окружения могут использовать разные пустые файлы SQLite. Учитывайте, что права доступа обычно дают ошибку
unable to open database file/readonly, а неno such table. После исправления конфигурации повторите действие и проверьте, что запись/чтение идёт из нужной базы.
#Какой файл открыт
Открытие SQLite в режиме обычного чтения/записи по неверному пути может создать пустую базу. Сначала выясните реальный путь и проверьте существование файла, затем смотрите sqlite_schema и применённые миграции. realpath() в PHP возвращает false для отсутствующего файла; это диагностический признак, а не готовый способ восстановления.
#Содержимое
Откройте подтверждённый файл базы для просмотра схемы (sqlite3 /точный/путь/app.db ".tables"). Не запускайте самодельный php bin/migrate.php: команды миграций и их наличие зависят от проекта. При необходимости используйте штатный механизм после копии и проверки версии схемы.
#Права и среда
Проверьте права на каталог и файл: веб-сервер должен иметь право записи в каталог (для журналов). Для Docker смонтируйте том с файлом базы. На Windows и Linux различаются пути; проверьте, не подставляется ли тестовая база из переменной окружения. Не копируйте базу при работающем приложении без .backup.
sqlite3 data.db ".tables"sqlite3 data.db ".schema users"