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

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

попробуйте этот, вы получили полную информацию о таблицах http://www.sqlite.org/pragma.html#schema

Piyush 09.09.2011 11:39

Ниже приведен полезный графический интерфейс для sqlite, если вам интересно: sqlitestudio.pl Предоставляет вам доступ для просмотра деталей баз данных, таблиц, очень быстро, а также имеет хороший редактор запросов ...

James Oravec 17.04.2013 19:40

.tables для таблиц и .schema ?TABLE? для схемы конкретной таблицы.

H6. 16.06.2013 19:52

.table 'bank_%' или .table '%_empl' также допустимый синтаксис для запроса префиксов / суффиксов!

gavenkoa 20.02.2015 03:23
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1 250
4
1 027 706
17
Перейти к ответу Данный вопрос помечен как решенный

Ответы 17

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

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

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

Команды .DUMP и .SCHEMA вообще не видят базу данных.

Нелегко прочитать или запомнить для использования в будущем; встроенная команда .tables более интуитивно понятна

user649198 24.02.2013 02:02

@Gryllida: несмотря на то, что это можно использовать из любого SQL-API, поскольку это валидный SQL. Встроенные команды могут поддерживаться не везде.

Valentin Heinitz 08.04.2013 12:36

@DoktorJ Был ли .tables изменен для отображения таблиц из присоединенной базы данных?

Lasse V. Karlsen 26.11.2013 23:15

Что ж, если я запускаю sqlite через sqlite3 ./mydatabase.db, а затем набираю .tables, я получаю список таблиц в этой базе данных ... так что да. Точно так же .schema mytable показывает мне схему таблицы в операторе CREATE TABLE, а SELECT * FROM mytable показывает мне все данные в «mytable».

Doktor J 27.11.2013 03:24
В этой базе данных, yes, but this question was about showing the tables in a database you have attached. Have the .tables command been modified to show those as well?
Lasse V. Karlsen 27.11.2013 12:32

Дох! Сбой понимания чтения ... Мне как-то удалось не уловить ссылку ATTACH ... дважды> _ <

Doktor J 27.11.2013 20:49

вы просто читаете таблицу sqlite_master из столбца type, где строка table, верно? Я предлагаю вам просто добавить это в свой ответ, чтобы все лучше понимали структуру базы данных и ее главную таблицу.

Honey 26.04.2016 23:53

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

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

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

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

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

    .help
    

.table и .tables разрешены. В этом отношении .ta также будет работать, поскольку sqlite3 примет любую однозначную команду. Имя команды согласно справке действительно ".tables" (если кто-то еще обращает внимание).

dbn 06.02.2013 05:26

(Это должен быть принятый ответ, это самый простой способ делать что-то).

dbn 06.02.2013 05:27

.tables не будет отображать таблицы, если одна база данных открыта через ATTACH '<path>' AS <name>;, но ответ lasse подойдет. поскольку OP упомянул ПРИЛОЖЕНИЕ, я считаю, что он был прав, не принимая этот ответ. изменить: только что заметил, что Энтони и другие ниже также указали на это.

antiplex 29.03.2013 01:33

@dbw: Не обязательно. Предположим, вы делаете оболочку БД, способную использовать SQLite или MySql (мой случай). Использование большего количества команд, соответствующих стандарту SQL, упростило бы перенос обертки на других языках, чем если бы вы использовали команды, специфичные для поставщика БД.

Valentin Heinitz 08.04.2013 12:42

"... sqlite3 примет любую однозначную команду ..." К сожалению, иногда он также принимает неоднозначные команды. Например, ".s" интерпретируется как ".show", даже если ".schema", '.separator "или" .stats "тоже возможны. И когда он не принимает неоднозначную команду, он не перечисляет возможности.

user2443147 13.08.2014 21:48

@dbw, черт возьми, его ответ мог быть просто: .tables

stagl 21.03.2016 02:33

В этом ответе отсутствует контекст, поэтому он бесполезен.

NL23codes 22.06.2020 17:49

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

SELECT name FROM sqlite_master
WHERE type='table';

Итак ... cur.execute(""" SELECT name FROM sqlite_master WHERE type='table';""") или нет? У меня это не работает, но я не уверен, где следует запускать этот код.

jbuddy_13 23.04.2020 18:32

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

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

SELECT name FROM sqlite_master WHERE type = "table"

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

Спасибо за единственный ответ, который действительно касался вопроса ... "Какой SQL", а не какую команду можно использовать ... спасибо!

Brad Parks 18.01.2014 05:37

Кроме того, это печатает одно имя таблицы в строке, а .tables печатает несколько столбцов с именами таблиц (раздражает / бесполезно).

Shane 21.03.2014 23:14

Для этого есть команда в командной строке 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
Ответ принят как подходящий

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

У меня работает только "SELECT name FROM sqlite_master WHERE type='table'"

vladkras 15.12.2015 16:28

ВЫБЕРИТЕ имя ИЗ my_db.sqlite_master ГДЕ type = 'table'; это не работает для меня (для прикрепленной БД) и вызывает ошибку, например: такая таблица не существует "my_db.sqlite_master"

kanika 27.07.2016 10:16

что вы имели ввиду под временными таблицами? Есть ли какие-нибудь, когда я только что открыл файл базы данных SQLite?

Ewoks 07.05.2017 16:20

Временные таблицы - это таблицы, созданные с помощью команд SQL CREATE TEMPORARY TABLE. Их содержимое удаляется при закрытии текущего соединения с базой данных и никогда не сохраняется в файл базы данных.

Anthony Williams 08.05.2017 17:37

В командном режиме sqlite3 и запустите ATTACH "some_file.db" AS my_db;. Работает!

John_J 25.12.2017 10:22

Вы также можете использовать "SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%';" для фильтрации системных таблиц, управляемых внутри SQLite.

Elder Druid 12.09.2020 01:47

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

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

sqlite3> ATTACH database.sqlite as "attached"

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

$sqlite3 database.sqlite
sqlite3> .dump

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

Вероятно, это лучший способ сделать это.

Alix Axel 31.01.2013 14:42

Это работает, только если вы знаете название таблицы. Вы не можете использовать это, чтобы получить список имен таблиц.

Eric W 18.04.2013 18:06

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

.table

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

Странно, должно быть, он правильный, но когда я его использую, не работает

Jürgen K. 14.01.2016 18:54

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

The ".tables" command is similar to setting list mode then executing the following query:

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

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

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

Mona Jalal 14.10.2014 23:06

Вы используете версию 2012 года выпуска.

pepper 14.10.2014 23:08

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

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

SELECT name FROM sqlite_master WHERE type='table'

И для использования в iOS:

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

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

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'

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

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

ВЫБЕРИТЕ отдельное tbl_name из sqlite_master в порядке 1;

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

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

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

Другие вопросы по теме