Какой SQL можно использовать для перечисления таблиц и строк в этих таблицах в файле базы данных SQLite - после того, как я прикрепил его с помощью команды ATTACH в инструменте командной строки SQLite 3?
Ниже приведен полезный графический интерфейс для sqlite, если вам интересно: sqlitestudio.pl Предоставляет вам доступ для просмотра деталей баз данных, таблиц, очень быстро, а также имеет хороший редактор запросов ...
.tables для таблиц и .schema ?TABLE? для схемы конкретной таблицы.
.table 'bank_%' или .table '%_empl' также допустимый синтаксис для запроса префиксов / суффиксов!


Похоже, вам нужно просмотреть таблицу sqlite_master, например:
SELECT * FROM dbname.sqlite_master WHERE type='table';
Затем вручную просмотрите каждую таблицу с помощью SELECT или аналогичного устройства, чтобы просмотреть строки.
Команды .DUMP и .SCHEMA вообще не видят базу данных.
Нелегко прочитать или запомнить для использования в будущем; встроенная команда .tables более интуитивно понятна
@Gryllida: несмотря на то, что это можно использовать из любого SQL-API, поскольку это валидный SQL. Встроенные команды могут поддерживаться не везде.
@DoktorJ Был ли .tables изменен для отображения таблиц из присоединенной базы данных?
Что ж, если я запускаю sqlite через sqlite3 ./mydatabase.db, а затем набираю .tables, я получаю список таблиц в этой базе данных ... так что да. Точно так же .schema mytable показывает мне схему таблицы в операторе CREATE TABLE, а SELECT * FROM mytable показывает мне все данные в «mytable».
.tables command been modified to show those as well?
Дох! Сбой понимания чтения ... Мне как-то удалось не уловить ссылку ATTACH ... дважды> _ <
вы просто читаете таблицу sqlite_master из столбца type, где строка table, верно? Я предлагаю вам просто добавить это в свой ответ, чтобы все лучше понимали структуру базы данных и ее главную таблицу.
Чтобы просмотреть таблицы в базе данных SQLite, выполните несколько шагов:
Перечислите таблицы в вашей базе данных:
.tables
Перечислите, как выглядит таблица:
.schema tablename
Распечатать всю таблицу:
SELECT * FROM tablename;
Перечислите все доступные команды подсказки SQLite:
.help
.table и .tables разрешены. В этом отношении .ta также будет работать, поскольку sqlite3 примет любую однозначную команду. Имя команды согласно справке действительно ".tables" (если кто-то еще обращает внимание).
(Это должен быть принятый ответ, это самый простой способ делать что-то).
.tables не будет отображать таблицы, если одна база данных открыта через ATTACH '<path>' AS <name>;, но ответ lasse подойдет. поскольку OP упомянул ПРИЛОЖЕНИЕ, я считаю, что он был прав, не принимая этот ответ. изменить: только что заметил, что Энтони и другие ниже также указали на это.
@dbw: Не обязательно. Предположим, вы делаете оболочку БД, способную использовать SQLite или MySql (мой случай). Использование большего количества команд, соответствующих стандарту SQL, упростило бы перенос обертки на других языках, чем если бы вы использовали команды, специфичные для поставщика БД.
"... sqlite3 примет любую однозначную команду ..." К сожалению, иногда он также принимает неоднозначные команды. Например, ".s" интерпретируется как ".show", даже если ".schema", '.separator "или" .stats "тоже возможны. И когда он не принимает неоднозначную команду, он не перечисляет возможности.
@dbw, черт возьми, его ответ мог быть просто: .tables
В этом ответе отсутствует контекст, поэтому он бесполезен.
Чтобы составить список таблиц, вы также можете:
SELECT name FROM sqlite_master
WHERE type='table';
Итак ... cur.execute(""" SELECT name FROM sqlite_master WHERE type='table';""") или нет? У меня это не работает, но я не уверен, где следует запускать этот код.
Команда ".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", а не какую команду можно использовать ... спасибо!
Кроме того, это печатает одно имя таблицы в строке, а .tables печатает несколько столбцов с именами таблиц (раздражает / бесполезно).
Для этого есть команда в командной строке 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'"
ВЫБЕРИТЕ имя ИЗ my_db.sqlite_master ГДЕ type = 'table'; это не работает для меня (для прикрепленной БД) и вызывает ошибку, например: такая таблица не существует "my_db.sqlite_master"
что вы имели ввиду под временными таблицами? Есть ли какие-нибудь, когда я только что открыл файл базы данных SQLite?
Временные таблицы - это таблицы, созданные с помощью команд SQL CREATE TEMPORARY TABLE. Их содержимое удаляется при закрытии текущего соединения с базой данных и никогда не сохраняется в файл базы данных.
В командном режиме sqlite3 и запустите ATTACH "some_file.db" AS my_db;. Работает!
Вы также можете использовать "SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%';" для фильтрации системных таблиц, управляемых внутри SQLite.
Самый простой способ сделать это - открыть базу данных напрямую и использовать команду .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
Вероятно, это лучший способ сделать это.
Это работает, только если вы знаете название таблицы. Вы не можете использовать это, чтобы получить список имен таблиц.
Используйте .help для проверки доступных команд.
.table
Эта команда покажет все таблицы в вашей текущей базе данных.
Странно, должно быть, он правильный, но когда я его использую, не работает
Согласно документация, эквивалент 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" для получения справки.
Вы используете версию 2012 года выпуска.
Поскольку никто не упомянул об официальном справочнике 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' перед "заказом"
попробуйте этот, вы получили полную информацию о таблицах http://www.sqlite.org/pragma.html#schema