it-swarm-ru.tech

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

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

1119
izb

Вспомогательные функции .tables и .schema не проверяют базы данных ATTACH: они просто запрашивают таблицу 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';
528
Anthony Williams

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

  1. Перечислите таблицы в своей базе данных:

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

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

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

    .help
    
1238
Mark Janssen

Похоже, вам нужно просмотреть таблицу sqlite_master, например:

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

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

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

434
Lasse Vågsæther Karlsen

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

SELECT name FROM sqlite_master WHERE type = "table"

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

153
Christian Davén

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

.table

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

68
Antony.H

Для этого в командной строке 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
40
flubba

Для перечисления таблиц вы также можете сделать:

SELECT name FROM sqlite_master
WHERE type='table';
36
Rafał Dowgird

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

29
Luiz Geron

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

SELECT name FROM sqlite_master WHERE type='table'

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

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

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

Команда ".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 ответ.

16
Alix Axel

Начиная с последних версий SQLite 3 вы можете выпустить:

.fullschema

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

15
pepper

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

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

sqlite3> ATTACH database.sqlite as "attached"

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

$sqlite3 database.sqlite
sqlite3> .dump
11
Noah

С помощью union all объедините все таблицы в один список.

select name
from sqlite_master 
where type='table'

union all 

select name 
from sqlite_temp_master 
where type='table'
9
openwonk

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

import sqlite3

TABLE_LIST_QUERY = "SELECT * FROM sqlite_master where type='table'"
9
Mrityunjay Singh

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

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

Вы можете управлять своей базой данных, используя команды, описанные в этой ссылке. Кроме того, , если вы используете ОС Windows и не знаете, где находится команда Shell, то есть на сайте 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 по тому же пути.

7
oiyio

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

 sqlite> создать таблицу_a (id int, int, b int); 
 sqlite> .schema table_a 
 CREATE TABLE table_a (id int, int, b int); 
5
trf

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

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

ВЫБЕРИТЕ отличное имя tbl_name от порядка sqlite_master на 1;

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

ВЫБЕРИТЕ отличное имя tbl_name из aa.sqlite_master порядок на 1;

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

1
Klaas-Z4us-V