Как перечислить таблицы в файле базы данных SQLite, который был открыт с помощью ATTACH ?
Вопрос
Какой SQL можно использовать для перечисления таблиц и строк внутри этих таблиц в файле базы данных SQLite - как только я прикреплю его вместе с ATTACH
команда в инструменте командной строки SQLite 3?
Решение
Тот Самый .tables
, и .schema
"вспомогательные" функции не просматривают подключенные базы данных:они просто запрашивают SQLITE_MASTER
таблица для "основной" базы данных.Следовательно, если вы использовали
ATTACH some_file.db AS my_db;
затем вам нужно сделать
SELECT name FROM my_db.sqlite_master WHERE type='table';
Обратите внимание, что временные таблицы не отображаются с .tables
либо:вы должны перечислить sqlite_temp_master
за это:
SELECT name FROM sqlite_temp_master WHERE type='table';
Другие советы
Существует несколько шагов для просмотра таблиц в базе данных SQLite:
Перечислите таблицы в вашей базе данных:
.tables
Укажите, как выглядит таблица:
.schema tablename
Распечатайте всю таблицу целиком:
SELECT * FROM tablename;
Перечислите все доступные команды командной строки SQLite:
.help
Похоже, вам нужно пройти через sqlite_master ( командный файл) таблица, подобная этой:
SELECT * FROM dbname.sqlite_master WHERE type='table';
А затем вручную пройдитесь по каждой таблице с помощью SELECT
или что-то подобное, чтобы посмотреть на строки.
Тот Самый .DUMP
и .SCHEMA
команды, похоже, вообще не видят базу данных.
Чтобы отобразить все таблицы, используйте
SELECT name FROM sqlite_master WHERE type = "table"
Чтобы показать все строки, я думаю, вы можете выполнить итерацию по всем таблицам и просто сделать SELECT * для каждой из них.Но, может быть, тебе нужна СВАЛКА?
Использование .help
чтобы проверить наличие доступных команд.
.table
Эта команда отобразит все таблицы в вашей текущей базе данных.
Для этого в командной строке SQLite доступна команда:
.tables ?PATTERN? List names of tables matching a LIKE pattern
Который преобразуется в следующий SQL:
SELECT name FROM sqlite_master
WHERE type IN ('table','view') AND name NOT LIKE 'sqlite_%'
UNION ALL
SELECT name FROM sqlite_temp_master
WHERE type IN ('table','view')
ORDER BY 1
Чтобы составить список таблиц, вы также можете сделать:
SELECT name FROM sqlite_master
WHERE type='table';
Попробуй PRAGMA table_info(table-name);
http://www.sqlite.org/pragma.html#schema
Я использую этот запрос, чтобы получить его:
SELECT name FROM sqlite_master WHERE type='table'
И для использования в iOS:
NSString *aStrQuery=[NSString stringWithFormat:@"SELECT name FROM sqlite_master WHERE type='table'"];
В соответствии с Документация, эквивалент MySQLs' SHOW TABLES;
является:
Команда ".tables" аналогична настройке режима списка с последующим выполнением следующего запроса:
SELECT name FROM sqlite_master
WHERE type IN ('table','view') AND name NOT LIKE 'sqlite_%'
UNION ALL
SELECT name FROM sqlite_temp_master
WHERE type IN ('table','view')
ORDER BY 1;
Однако, если вы проверяете, существует ли отдельная таблица (или хотите получить ее подробную информацию), см. @LuizGeron отвечай.
Начиная с последних версий SQLite 3, вы можете выдавать:
.fullschema
чтобы просмотреть все ваши инструкции create.
Самый простой способ сделать это - напрямую открыть базу данных и использовать .dump
команду, а не присоединять ее после вызова инструмента оболочки SQLite 3.
Итак...(предположим, что приглашение командной строки вашей операционной СИСТЕМЫ равно $) вместо $sqlite3
:
sqlite3> ATTACH database.sqlite as "attached"
Из командной строки вашей операционной системы откройте базу данных напрямую:
$sqlite3 database.sqlite
sqlite3> .dump
Использование:
import sqlite3
TABLE_LIST_QUERY = "SELECT * FROM sqlite_master where type='table'"
Через a union all
, объединить все таблицы в один список.
select name
from sqlite_master
where type='table'
union all
select name
from sqlite_temp_master
where type='table'
Поскольку никто не упоминал об официальной ссылке на SQLite, я думаю, может быть полезно сослаться на нее под этим заголовком:
https://www.sqlite.org/cli.html
Вы можете манипулировать своей базой данных, используя команды, описанные по этой ссылке.Кроме того, если вы используете ОС Windows и не знаю, где находится командная оболочка, то есть на сайте SQLite:
https://www.sqlite.org/download.html
После загрузки его, нажмите sqlite3.exe файл, чтобы инициализировать командную оболочку SQLite.Когда он инициализирован, по умолчанию этот сеанс SQLite использует базу данных в памяти, а не файл на диске, и поэтому все изменения будут потеряны при завершении сеанса.Чтобы использовать постоянный дисковый файл в качестве базы данных, введите команду ".открыть ex1.db" сразу после запуска окна терминала.
Приведенный выше пример приводит к открытию и использованию файла базы данных с именем "ex1.db", а также к созданию, если он ранее не существовал.Возможно, вы захотите использовать полный путь, чтобы убедиться, что файл находится в каталоге, в котором, по вашему мнению, он находится.Используйте косую черту в качестве разделителя каталогов.Другими словами, используйте "c:/work/ex1.db", а не "c:\work\ex1.db".
Чтобы просмотреть все таблицы в базе данных, которую вы выбрали ранее, введите команду .таблицы как сказано в приведенной выше ссылке.
Если вы работаете в Windows, я думаю, было бы полезно переместить этот sqlite.exe файл в ту же папку, что и другие файлы Python.Таким образом, файл Python выполняет запись в файл, а оболочка SQLite - чтение из файлов .db находятся по одному и тому же пути.
Команда ".schema" выведет список доступных таблиц и их строк, показав вам инструкцию, используемую для создания указанных таблиц:
sqlite> create table_a (id int, a int, b int); sqlite> .schema table_a CREATE TABLE table_a (id int, a int, b int);
.da для просмотра всех баз данных - вызывается одна из них 'Главная'
таблицы этой базы данных можно увидеть с помощью
ВЫБЕРИТЕ отличное tbl_name из sqlite_master в порядке убывания на 1;
Для подключенных баз данных нужны префиксы, которые вы выбрали с помощью, КАК в инструкции ATTACH, например аа (, bb, cc...) итак:
ВЫБЕРИТЕ отличное tbl_name из aa.sqlite_master заказ на 1;
Обратите внимание, что здесь вы также получаете просмотры.Чтобы исключить их, добавьте где type = 'таблица' перед "заказом"