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

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

17.09.2008 12:59:53
попробуйте этот, вы получили полную информацию о таблицах http://www.sqlite.org/pragma.html#schema
Piyush 9.09.2011 07:39:42
Ниже приведен полезный графический интерфейс для sqlite, если вы заинтересованы: sqlitestudio.pl Предоставляет вам доступ к просмотру подробной информации о базах данных, таблицах, очень быстро, а также имеет хороший редактор запросов ...
James Oravec 17.04.2013 15:40:20
.tablesдля таблиц и .schema ?TABLE?для схемы конкретной таблицы.
H6. 16.06.2013 15:52:17
.table 'bank_%'или .table '%_empl'также правильный синтаксис для запроса префиксов / суффиксов!
gavenkoa 20.02.2015 00:23:08
17 ОТВЕТОВ
РЕШЕНИЕ

Функции .tables, и .schema"helper" не проверяют базы данных 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';
568
17.09.2008 13:30:00
У "SELECT name FROM sqlite_master WHERE type='table'"меня работает только
vladkras 15.12.2015 13:28:14
ВЫБЕРИТЕ имя ОТ my_db.sqlite_master WHERE type = 'table'; у меня это не работает (для прикрепленной БД) и выдает ошибку как: такой таблицы не существует "my_db.sqlite_master"
kanika 27.07.2016 07:16:16
что вы имели ввиду под временными таблицами? Есть ли какие-то, когда я только что открыл файл базы данных SQLite?
Ewoks 7.05.2017 13:20:58
Временные таблицы - это таблицы, созданные с помощью CREATE TEMPORARY TABLEкоманд SQL. Их содержимое удаляется при закрытии текущего подключения к базе данных, и они никогда не сохраняются в файл базы данных.
Anthony Williams 8.05.2017 14:37:34
Под командным режимом sqlite3 и запустите ATTACH "some_file.db" AS my_db; Все заработало !
John_J 25.12.2017 07:22:41

Похоже, вам нужно пройти через таблицу sqlite_master , например так:

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

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

.DUMPИ .SCHEMAкоманды не появляется , чтобы увидеть базу данных на всех.

442
12.06.2014 08:52:42
Не то, что легко прочитать или запомнить для использования в будущем; встроенная .tablesкоманда более интуитивна
user649198 23.02.2013 22:02:36
@Gryllida: несмотря на то, что это можно использовать из любого SQL-API, поскольку это действительный SQL. Встроенные команды могут поддерживаться не везде.
Valentin Heinitz 8.04.2013 08:36:54
@DoktorJ Были .tablesизменены для отображения таблиц из прикрепленной базы данных?
Lasse V. Karlsen 26.11.2013 19:15:33
В этой базе , да, но этот вопрос касался отображения таблиц в базе данных, которую вы прикрепили. Были ли .tablesкоманда была изменена , чтобы показать тем, а?
Lasse V. Karlsen 27.11.2013 08:32:27
Doh! Понимание чтения не удалось ... Мне как-то удалось не поймать ссылку ATTACH ... дважды> _ <
Doktor J 27.11.2013 16:49:27

Есть несколько шагов для просмотра таблиц в базе данных SQLite:

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

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

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

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

    .help
1264
16.04.2014 15:05:05
.tableи .tablesоба разрешены. В этом отношении также .taбудет работать, так как sqlite3 примет любую однозначную команду. Название команды согласно справке действительно ".tables" (если кто-то все еще обращает внимание).
dbn 6.02.2013 01:26:03
(Это должен быть принятый ответ, это самый простой способ сделать что-то).
dbn 6.02.2013 01:27:02
.tablesне будет отображать таблицы, если одна открытая база данных будет проходить, ATTACH '<path>' AS <name>;но ответ lasse сделает. Поскольку ОП упомянул ПРИЛОЖЕНИЕ, я считаю, что он был прав, что не принял этот ответ. редактировать: только что заметил, что Энтони и другие ниже также указали на это.
antiplex 28.03.2013 21:33:04
@dbw: не обязательно. Представьте, что вы делаете обертку БД, способную использовать SQLite или MySql (мой случай). Использование большего количества SQL-совместимых команд упростит перенос переноса на другие языки, чем если бы вы использовали команды, специфичные для поставщика БД.
Valentin Heinitz 8.04.2013 08:42:12
«... sqlite3 примет любую однозначную команду ...» К сожалению, иногда она также принимает неоднозначные команды. Например, «.s» интерпретируется как «.show», хотя «.schema», «.separator» или «.stats» также могут быть возможными. И когда он не принимает неоднозначную команду, он не перечисляет возможности
user2443147 13.08.2014 17:48:20

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

SELECT name FROM sqlite_master
WHERE type='table';
36
13.03.2013 09:19:23

Команда ".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);
5
17.09.2008 13:05:20

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

SELECT name FROM sqlite_master WHERE type = "table"

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

159
17.09.2008 13:06:03
Спасибо за единственный ответ, который действительно ответил на вопрос ... "Какой SQL", а не какую команду можно использовать ... спасибо!
Brad Parks 18.01.2014 01:37:42
Кроме того, это печатает одно имя таблицы на строку, в то время как .tables печатает несколько столбцов с именами таблиц (раздражает / не полезно).
Shane 21.03.2014 19:14:10

Для этого в командной строке 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
42
1.09.2017 00:51:06

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

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

sqlite3> ATTACH database.sqlite as "attached"

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

$sqlite3 database.sqlite
sqlite3> .dump
12
18.11.2015 19:02:15

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

32
13.03.2013 09:16:31
Это, наверное, лучший способ сделать это.
Alix Axel 31.01.2013 10:42:39
Это работает, только если вы знаете имя таблицы. Вы не можете использовать это, чтобы получить список имен таблиц.
Eric W 18.04.2013 14:06:52

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

.table

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

68
12.06.2014 08:38:52
Странно, это должно быть правильно, но не работает, когда я его использую
Jürgen K. 14.01.2016 15:54:30

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

16
23.05.2017 12:02:49

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

.fullschema

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

15
18.11.2015 19:03:36
SQLite версия 3.7.13 2012-07-17 17:46:21 Введите «.help» для инструкций Введите операторы SQL, оканчивающиеся на «;» sqlite> .fullschema Ошибка: неизвестная команда или недопустимые аргументы: "fullschema". Введите «.help» для помощи
Mona Jalal 14.10.2014 19:06:50
Вы используете версию 2012 года
pepper 14.10.2014 19:08:43

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

7
23.01.2016 23:54:23

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

SELECT name FROM sqlite_master WHERE type='table'

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

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

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

import sqlite3

TABLE_LIST_QUERY = "SELECT * FROM sqlite_master where type='table'"
9
18.11.2015 19:06:52

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

select name
from sqlite_master 
where type='table'

union all 

select name 
from sqlite_temp_master 
where type='table'
10
13.10.2016 21:48:00

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

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

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

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

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

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

1
12.11.2017 10:25:09