Какой SQL можно использовать для перечисления таблиц и строк в этих таблицах в файле базы данных SQLite - после того, как я прикрепил его с помощью ATTACH
команды в средстве командной строки SQLite 3 ?
Функции .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';
"SELECT name FROM sqlite_master WHERE type='table'"
меня работает толькоCREATE TEMPORARY TABLE
команд SQL. Их содержимое удаляется при закрытии текущего подключения к базе данных, и они никогда не сохраняются в файл базы данных. ATTACH "some_file.db" AS my_db;
Все заработало ! Похоже, вам нужно пройти через таблицу sqlite_master , например так:
SELECT * FROM dbname.sqlite_master WHERE type='table';
А затем вручную просмотрите каждую таблицу с SELECT
или подобным, чтобы посмотреть на строки.
.DUMP
И .SCHEMA
команды не появляется , чтобы увидеть базу данных на всех.
.tables
команда более интуитивна.tables
изменены для отображения таблиц из прикрепленной базы данных? .tables
команда была изменена , чтобы показать тем, а? Есть несколько шагов для просмотра таблиц в базе данных SQLite:
Перечислите таблицы в своей базе данных:
.tables
Перечислите, как выглядит таблица:
.schema tablename
Распечатать всю таблицу:
SELECT * FROM tablename;
Перечислите все доступные команды приглашения SQLite:
.help
.table
и .tables
оба разрешены. В этом отношении также .ta
будет работать, так как sqlite3 примет любую однозначную команду. Название команды согласно справке действительно ".tables" (если кто-то все еще обращает внимание). .tables
не будет отображать таблицы, если одна открытая база данных будет проходить, ATTACH '<path>' AS <name>;
но ответ lasse сделает. Поскольку ОП упомянул ПРИЛОЖЕНИЕ, я считаю, что он был прав, что не принял этот ответ. редактировать: только что заметил, что Энтони и другие ниже также указали на это. Для перечисления таблиц вы также можете сделать:
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 - это то, что вам нужно?
Для этого в командной строке 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
Самый простой способ сделать это - открыть базу данных напрямую и использовать .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
Эта команда покажет все таблицы в вашей текущей базе данных.
Согласно документации , эквивалент 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 .
Начиная с последних версий SQLite 3 вы можете выпустить:
.fullschema
чтобы увидеть все ваши заявления создания.
Поскольку никто не упомянул об официальной ссылке на 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'"
Через a 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, например, aa (, bb, cc ...), поэтому:
ВЫБЕРИТЕ отличное имя tbl_name из порядка aa.sqlite_master на 1;
Обратите внимание, что здесь вы также получаете мнения. Чтобы исключить их, добавьте, где type = 'table' перед 'order'
.tables
для таблиц и.schema ?TABLE?
для схемы конкретной таблицы..table 'bank_%'
или.table '%_empl'
также правильный синтаксис для запроса префиксов / суффиксов!