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

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

Ответы

Ответ 1

Функции .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';

Ответ 2

Есть несколько шагов, чтобы увидеть таблицы в базе данных SQLite:

  • Список таблиц в вашей базе данных:

    .tables
    
  • Перечислите, как выглядит таблица:

    .schema tablename
    
  • Распечатайте всю таблицу:

    SELECT * FROM tablename;
    
  • Перечислите все доступные команды командной строки SQLite:

    .help
    

Ответ 3

Кажется, вам нужно пройти через таблицу sqlite_master, например:

SELECT * FROM dbname.sqlite_master WHERE type='table';

И затем вручную пройдите через каждую таблицу с помощью SELECT или аналогично, чтобы посмотреть на строки.

Команды .DUMP и .SCHEMA вообще не отображаются в базе данных.

Ответ 4

Чтобы показать все таблицы, используйте

SELECT name FROM sqlite_master WHERE type = "table"

Чтобы показать все строки, я думаю, вы можете проходить через все таблицы и просто делать SELECT * на каждом из них. Но, возможно, DUMP - это то, что вам нужно?

Ответ 5

Используйте .help для проверки доступных команд.

.table

Эта команда будет отображать все таблицы в вашей текущей базе данных.

Ответ 6

В командной строке 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

Ответ 7

Чтобы перечислить таблицы, вы также можете:

SELECT name FROM sqlite_master
WHERE type='table';

Ответ 9

В соответствии с документацией эквивалент MySQL 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.

Ответ 10

По последним версиям SQLite 3 вы можете указать:

.fullschema

чтобы увидеть все ваши операторы создания.

Ответ 11

Я использую этот запрос для его получения:

SELECT name FROM sqlite_master WHERE type='table'

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

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

Ответ 12

Самый простой способ сделать это - открыть базу данных напрямую и использовать команду .dump, а не прикреплять ее после вызова инструмента оболочки SQLite 3.

Итак... (предположим, что приглашение командной строки вашей ОС равно $) вместо $sqlite3:

sqlite3> ATTACH database.sqlite as "attached"

В командной строке ОС откройте базу данных напрямую:

$sqlite3 database.sqlite
sqlite3> .dump

Ответ 13

Использование:

import sqlite3

TABLE_LIST_QUERY = "SELECT * FROM sqlite_master where type='table'"

Ответ 14

Через union all объедините все таблицы в один список.

select name
from sqlite_master 
where type='table'

union all 

select name 
from sqlite_temp_master 
where type='table'

Ответ 15

Поскольку никто не упомянул об официальной ссылке SQLite, я думаю, может быть полезно обратиться к нему по этому разделу:

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

Вы можете манипулировать своей базой данных, используя команды, описанные в этой ссылке. Кроме того, если вы используете ОС Windows и не знаете, где находится командная оболочка, то есть на сайте SQLite:

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

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

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

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

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

Ответ 16

Команда .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);

Ответ 17

.da, чтобы увидеть все базы данных - один из них называется main '

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

ВЫБРАТЬ отдельное имя tbl_ из заказа sqlite_master на 1;

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

Выберите отдельное имя tbl_ из aa.sqlite_master по 1;

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