Как составить список таблиц в файле базы данных SQLite, который был открыт с помощью ATTACH?
1197
Какой SQL можно использовать для перечисления таблиц и строк в этих таблицах в файле базы данных SQLite - после того, как я прикрепил его с помощью ATTACHкоманды в средстве командной строки SQLite 3 ?
Ниже приведен полезный графический интерфейс для sqlite, если вы заинтересованы: sqlitestudio.pl Дает вам доступ к просмотру деталей баз данных, таблиц, очень быстро и имеет хороший редактор запросов ...
Джеймс Оравец
17
.tablesдля таблиц и .schema ?TABLE?для схемы конкретной таблицы.
Функции .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';
У "SELECT name FROM sqlite_master WHERE type='table'"меня работает только
vladkras
3
ВЫБЕРИТЕ имя ОТ my_db.sqlite_master WHERE type = 'table'; у меня это не работает (для прикрепленной БД) и выдает ошибку как: такой таблицы не существует "my_db.sqlite_master"
kanika
что ты имел ввиду под временными таблицами? Есть ли когда-нибудь, когда я только что открыл файл базы данных SQLite?
Ewoks
Временные таблицы - это таблицы, созданные с помощью CREATE TEMPORARY TABLEкоманд SQL. Их содержимое удаляется при закрытии текущего подключения к базе данных, и они никогда не сохраняются в файл базы данных.
Энтони Уильямс
1
Под командным режимом sqlite3 и запустите ATTACH "some_file.db" AS my_db; Это сработало!
John_J
1272
Есть несколько шагов, чтобы увидеть таблицы в базе данных SQLite:
Перечислите таблицы в своей базе данных:
.tables
Перечислите, как выглядит таблица:
.schema tablename
Распечатать всю таблицу:
SELECT*FROM tablename;
Перечислите все доступные команды приглашения SQLite:
.tableи .tablesоба разрешены. В этом отношении также .taбудет работать, так как sqlite3 будет принимать любую однозначную команду. Название команды согласно справке действительно ".tables" (если кто-то все еще обращает внимание).
13
29
(Это должен быть принятый ответ, это самый простой способ сделать что-то).
13
6
.tablesне будет отображать таблицы, если одна открытая база данных будет проходить, ATTACH '<path>' AS <name>;но ответ lasse сделает. Поскольку ОП упомянул ПРИЛОЖЕНИЕ, я считаю, что он был прав, что не принял этот ответ. редактировать: только что заметил, что Энтони и другие ниже также указали на это.
антиплекс
2
@dbw: не обязательно. Представьте, что вы делаете обертку БД, способную использовать SQLite или MySql (мой случай). Использование большего количества SQL-совместимых команд упростит перенос переноса на другие языки, чем если бы вы использовали команды, специфичные для поставщика БД.
Валентин Хайниц
«... sqlite3 примет любую однозначную команду ...» К сожалению, иногда она также принимает неоднозначные команды. Например, «.s» интерпретируется как «.show», хотя «.schema», «.separator» или «.stats» также могут быть возможными. И когда он не принимает неоднозначную команду, он не перечисляет возможности
442
Похоже, вам нужно пройти через таблицу sqlite_master , например так:
SELECT*FROM dbname.sqlite_master WHERE type='table';
А затем вручную просмотрите каждую таблицу с SELECTили подобным, чтобы посмотреть на строки.
.DUMPИ .SCHEMAкоманды не появляется , чтобы увидеть базу данных на всех.
Не то, что легко читается или запоминается для использования в будущем; встроенная .tablesкоманда более интуитивно понятна
24
@Gryllida: несмотря на то, что это можно использовать из любого SQL-API, поскольку это действительный SQL. Встроенные команды могут поддерживаться не везде.
Валентин Хайниц
2
@DoktorJ Были .tablesизменены для отображения таблиц из прикрепленной базы данных?
Лассе В. Карлсен
4
В этой базе данных , да, но этот вопрос касался отображения таблиц в базе данных, которую вы прикрепили. Были ли .tablesкоманда была изменена , чтобы показать тем, а?
Лассе В. Карлсен
4
Doh! Ошибка чтения ... Мне как-то не удалось поймать ссылку ATTACH ... дважды> _ <
Doktor J
162
Чтобы показать все таблицы, используйте
SELECT name FROM sqlite_master WHERE type ="table"
Чтобы показать все строки, я думаю, что вы можете перебрать все таблицы и просто выполнить SELECT * для каждой из них. Но, может быть, DUMP - это то, что вам нужно?
Странно, это должно быть правильно, но не работает, когда я его использую
Юрген К.
42
Для этого в командной строке SQLite доступна команда:
.tables ?PATTERN? List names of tables matching a LIKE pattern
Который преобразует в следующий SQL:
SELECT name FROM sqlite_master
WHERE type IN('table','view')AND name NOTLIKE'sqlite_%'UNIONALLSELECT name FROM sqlite_temp_master
WHERE type IN('table','view')ORDERBY1
Так ... cur.execute(""" SELECT name FROM sqlite_master WHERE type='table';""")или нет? Это не работает для меня, но я не уверен, где этот код должен быть запущен.
Согласно документации , эквивалент MySQLs SHOW TABLES;:
Команда ".tables" аналогична настройке режима списка и выполнению следующего запроса:
SELECT name FROM sqlite_master
WHERE type IN('table','view')AND name NOTLIKE'sqlite_%'UNIONALLSELECT name FROM sqlite_temp_master
WHERE type IN('table','view')ORDERBY1;
Однако, если вы проверяете, существует ли одна таблица (или чтобы узнать ее подробности), смотрите ответ @LuizGeron .
SQLite версия 3.7.13 2012-07-17 17:46:21 Введите «.help» для инструкций Введите операторы SQL, оканчивающиеся на «;» sqlite> .fullschema Ошибка: неизвестная команда или недопустимые аргументы: "fullschema". Введите «.help» для помощи
Мона Джалал
2
Вы используете версию 2012 года
перец
12
Самый простой способ сделать это - открыть базу данных напрямую и использовать .dumpкоманду, а не присоединять ее после вызова инструмента оболочки SQLite 3.
Итак ... (предположим, что приглашение командной строки вашей ОС равно $) вместо $sqlite3:
sqlite3> ATTACH database.sqlite as"attached"
Из командной строки вашей ОС откройте базу данных напрямую:
Вы можете управлять своей базой данных, используя команды, описанные в этой ссылке. Кроме того, если вы используете ОС Windows и не знаете, где находится командная оболочка, то есть на сайте SQLite:
После загрузки щелкните файл 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 по тому же пути.
.tables
для таблиц и.schema ?TABLE?
для схемы конкретной таблицы..table 'bank_%'
или.table '%_empl'
также правильный синтаксис для запроса префиксов / суффиксов!Ответы:
Функции
.tables
, и.schema
"вспомогательные" не смотрят в базы данных ATTACH: они просто запрашивают уSQLITE_MASTER
таблицы "основную" базу данных. Следовательно, если вы использовалитогда вам нужно сделать
Обратите внимание, что временные таблицы не отображаются
.tables
ни с одним: вы должны перечислитьsqlite_temp_master
для этого:источник
"SELECT name FROM sqlite_master WHERE type='table'"
меня работает толькоCREATE TEMPORARY TABLE
команд SQL. Их содержимое удаляется при закрытии текущего подключения к базе данных, и они никогда не сохраняются в файл базы данных.ATTACH "some_file.db" AS my_db;
Это сработало!Есть несколько шагов, чтобы увидеть таблицы в базе данных SQLite:
Перечислите таблицы в своей базе данных:
Перечислите, как выглядит таблица:
Распечатать всю таблицу:
Перечислите все доступные команды приглашения SQLite:
источник
.table
и.tables
оба разрешены. В этом отношении также.ta
будет работать, так как sqlite3 будет принимать любую однозначную команду. Название команды согласно справке действительно ".tables" (если кто-то все еще обращает внимание)..tables
не будет отображать таблицы, если одна открытая база данных будет проходить,ATTACH '<path>' AS <name>;
но ответ lasse сделает. Поскольку ОП упомянул ПРИЛОЖЕНИЕ, я считаю, что он был прав, что не принял этот ответ. редактировать: только что заметил, что Энтони и другие ниже также указали на это.Похоже, вам нужно пройти через таблицу sqlite_master , например так:
А затем вручную просмотрите каждую таблицу с
SELECT
или подобным, чтобы посмотреть на строки..DUMP
И.SCHEMA
команды не появляется , чтобы увидеть базу данных на всех.источник
.tables
команда более интуитивно понятна.tables
изменены для отображения таблиц из прикрепленной базы данных?.tables
команда была изменена , чтобы показать тем, а?Чтобы показать все таблицы, используйте
Чтобы показать все строки, я думаю, что вы можете перебрать все таблицы и просто выполнить SELECT * для каждой из них. Но, может быть, DUMP - это то, что вам нужно?
источник
Используйте
.help
для проверки доступных команд.Эта команда покажет все таблицы в вашей текущей базе данных.
источник
Для этого в командной строке SQLite доступна команда:
Который преобразует в следующий SQL:
источник
Чтобы составить список таблиц, вы также можете сделать:
источник
cur.execute(""" SELECT name FROM sqlite_master WHERE type='table';""")
или нет? Это не работает для меня, но я не уверен, где этот код должен быть запущен.Попробуйте
PRAGMA table_info(table-name);
http://www.sqlite.org/pragma.html#schema
источник
Я использую этот запрос, чтобы получить его:
И использовать в iOS:
источник
Согласно документации , эквивалент MySQLs
SHOW TABLES;
:Однако, если вы проверяете, существует ли одна таблица (или чтобы узнать ее подробности), смотрите ответ @LuizGeron .
источник
Начиная с последних версий SQLite 3 вы можете выпустить:
чтобы увидеть все ваши заявления создания.
источник
Самый простой способ сделать это - открыть базу данных напрямую и использовать
.dump
команду, а не присоединять ее после вызова инструмента оболочки SQLite 3.Итак ... (предположим, что приглашение командной строки вашей ОС равно $) вместо
$sqlite3
:Из командной строки вашей ОС откройте базу данных напрямую:
источник
Через a
union all
объедините все таблицы в один список.источник
Использование:
источник
Поскольку никто не упомянул об официальной ссылке на 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 по тому же пути.
источник
Команда ".schema" выведет список доступных таблиц и их строк, показывая вам оператор, использованный для создания указанных таблиц:
источник
.da, чтобы увидеть все базы данных - одна называется " основной "
таблицы этой базы данных можно увидеть по
ВЫБЕРИТЕ отличное имя tbl_name от порядка sqlite_master на 1;
Присоединенным базам данных нужны префиксы, которые вы выбрали с помощью AS в операторе ATTACH, например, aa (, bb, cc ...), поэтому:
ВЫБЕРИТЕ отличное имя tbl_name из порядка aa.sqlite_master на 1;
Обратите внимание, что здесь вы также получаете мнения. Чтобы исключить их, добавьте, где type = 'table' перед 'order'
источник