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

980

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

  • 1
    попробуйте этот, вы получите полную информацию о таблицах http://www.sqlite.org/pragma.html#schema
  • 2
    Ниже приведен полезный графический интерфейс для sqlite, если вы заинтересованы: sqlitestudio.pl Дает вам доступ к просмотру подробной информации о базах данных, таблицах, очень быстро, а также имеет хороший редактор запросов ...
Показать ещё 2 комментария
Теги:
database
sqlite3
metadata

17 ответов

437
Лучший ответ

Функции .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';
  • 94
    У меня работает только "SELECT name FROM sqlite_master WHERE type='table'"
  • 2
    ВЫБЕРИТЕ имя ОТ my_db.sqlite_master WHERE type = 'table'; это не работает для меня (для прикрепленной БД) и выдает ошибку как: такой таблицы не существует "my_db.sqlite_master"
Показать ещё 4 комментария
1132

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

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

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

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

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

    .help
    
  • 41
    .table и .tables разрешены. В этом отношении .ta будет работать, так как sqlite3 примет любую однозначную команду. Название команды согласно справке действительно ".tables" (если кто-то все еще обращает внимание).
  • 27
    (Это должен быть принятый ответ, это самый простой способ сделать что-либо).
Показать ещё 5 комментариев
421

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

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

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

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

  • 119
    Не то, что легко читается или запоминается для использования в будущем; встроенная команда .tables более интуитивна
  • 23
    @Gryllida: несмотря на то, что это можно использовать из любого SQL-API, поскольку это действительный SQL. Встроенные команды могут поддерживаться не везде.
Показать ещё 5 комментариев
133

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

SELECT name FROM sqlite_master WHERE type = "table"

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

  • 14
    Спасибо за единственный ответ, который действительно обратился к вопросу ... "Какой SQL", а не какую команду можно использовать ... спасибо!
  • 0
    Кроме того, это печатает одно имя таблицы на строку, в то время как .tables печатает несколько столбцов имен таблиц (раздражает / не полезно).
65

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

.table

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

  • 0
    Странно, это должно быть правильно, но не работает, когда я его использую
  • 0
    Где и как мне использовать .table ???
Показать ещё 1 комментарий
36

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

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

SELECT name FROM sqlite_master
WHERE type='table';
26

Попробуйте PRAGMA table_info(table-name);
http://www.sqlite.org/pragma.html#schema

  • 1
    Это, вероятно, лучший способ сделать это.
  • 6
    Это работает, только если вы знаете имя таблицы. Вы не можете использовать это, чтобы получить список имен таблиц.
14

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

12

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

SELECT name FROM sqlite_master WHERE type='table'

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

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

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

.fullschema

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

  • 0
    SQLite версия 3.7.13 2012-07-17 17:46:21 Введите «.help» для инструкций Введите операторы SQL, оканчивающиеся на «;» sqlite> .fullschema Ошибка: неизвестная команда или недопустимые аргументы: "fullschema". Введите ".help" для помощи
  • 1
    Вы используете версию с 2012 года
10

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

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

sqlite3> ATTACH database.sqlite as "attached"

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

$sqlite3 database.sqlite
sqlite3> .dump
8

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

select name
from sqlite_master 
where type='table'

union all 

select name 
from sqlite_temp_master 
where type='table'
8

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

import sqlite3

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

Поскольку никто не упомянул об официальной ссылке 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 файлов, находится в одном и том же пути.

5

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

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

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

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

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню