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

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

Функции .tables и .schema «helper» не рассматривают базы данных ATTACHed: они просто запрашивают таблицу 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 * на каждом из них. Но, возможно, DUMP – это то, что вам нужно?

Используйте .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

Согласно документации , эквивалент SHOW TABLES; 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 

для просмотра всех ваших заявлений о создании.

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

 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 и не знаете, где находится командная shell, то есть на сайте SQLite:

https://www.sqlite.org/download.html

После его загрузки щелкните файл sqlite3.exe, чтобы инициализировать командную оболочку SQLite . Когда он инициализируется, по умолчанию этот сеанс SQLite использует базу данных в памяти, а не файл на диске, и поэтому все изменения будут потеряны при выходе сеанса. Чтобы использовать постоянный файл диска в качестве базы данных, введите команду «.open ex1.db» сразу же после запуска windows терминала.

В приведенном выше примере файл базы данных с именем «ex1.db» открывается и используется, и создается, если он ранее не существовал. Возможно, вы захотите использовать полное имя пути, чтобы убедиться, что файл находится в каталоге, в котором вы думаете. В качестве символа разделителя каталога используйте перемотки вперед. Другими словами, используйте «c: /work/ex1.db», а не «c: \ work \ ex1.db».

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

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

Командование «.schema» будет отображать доступные таблицы и их строки, показывая вам инструкцию, используемую для создания указанных таблиц:

 sqlite> create table_a (id int, int, b int);
 sqlite> .schema table_a
 CREATE TABLE table_a (id int, a int, b int);

.da, чтобы увидеть все базы данных – один называется « основным »,

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

SELECT отличное имя tbl_ из заказа sqlite_master на 1;

Прилагаемые базы данных должны иметь префиксы, которые вы выбрали с помощью AS в заявлении ATTACH, например aa (, bb, cc …), поэтому:

SELECT отличное tbl_name от порядка aa.sqlite_master на 1;

Обратите внимание, что здесь вы также получаете представления. Чтобы исключить их, добавьте где type = ‘table’ перед ‘order’

Давайте будем гением компьютера.