Как перечислить таблицы в файле базы данных SQLite, который был открыт с помощью ATTACH?

какой SQL можно использовать для списка таблиц и строк в этих таблицах в файле базы данных SQLite - как только я прикрепил его с ATTACH команда в инструменте командной строки SQLite 3?

17 ответов


The .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:

  1. список таблиц в базе:

    .tables
    
  2. список, как выглядит таблица:

    .schema tablename
    
  3. распечатать всю таблицу:

    SELECT * FROM tablename;
    
  4. Список всех доступных команд приглашения 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


по словам документация, эквивалент MySQLs'SHOW TABLES; - это:

The ".команда "таблицы" аналогична настройке режима списка, затем выполняется следующий запрос:

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.


Я использую этот запрос, чтобы получить его:

SELECT name FROM sqlite_master WHERE type='table'

и использовать в iOS:

NSString *aStrQuery=[NSString stringWithFormat:@"SELECT name FROM sqlite_master WHERE type='table'"];

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

через 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 - ... децибел."

чтобы просмотреть все таблицы в базе данных, которую вы выбрали ранее, введите команду .таблицы как это сказано в приведенной выше ссылке.

Если вы работаете в Windows, я думаю, было бы полезно переместить этот sqlite.exe-файл в ту же папку с другими файлами Python. Таким образом, файл Python записывается, а оболочка SQLite считывает.файлы БД находятся по тому же пути.


в ".схема " commando перечислит доступные таблицы и их строки, показав вам инструкцию, используемую для создания указанных таблиц:

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, чтобы увидеть все базы данных-один называется' main'

таблицы этой базы данных можно увидеть

выберите distinct tbl_name из порядка sqlite_master на 1;

прикрепленные базы данных нуждаются в префиксах, которые вы выбрали, как в инструкции ATTACH, например aa (, bb, cc...) Итак:

выберите distinct tbl_name из aa.sqlite_master заказ 1;

обратите внимание, что здесь вы получите также мнения. К исключить эти добавления где type = 'table' перед "заказом"