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

StackOverflow https://stackoverflow.com/questions/82875

  •  01-07-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

Тот Самый .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';

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

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

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

    .tables
    
  2. Укажите, как выглядит таблица:

    .schema tablename
    
  3. Распечатайте всю таблицу целиком:

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

    .help
    

Похоже, вам нужно пройти через sqlite_master ( командный файл) таблица, подобная этой:

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

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

Тот Самый .DUMP и .SCHEMA команды, похоже, вообще не видят базу данных.

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

SELECT name FROM sqlite_master WHERE type = "table"

Чтобы показать все строки, я думаю, вы можете выполнить итерацию по всем таблицам и просто сделать SELECT * для каждой из них.Но, может быть, тебе нужна СВАЛКА?

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

.table

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

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

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

SELECT name FROM sqlite_master
WHERE type='table';

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

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

SELECT name FROM sqlite_master WHERE type='table'

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

NSString *aStrQuery=[NSString stringWithFormat:@"SELECT name FROM sqlite_master WHERE type='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

чтобы просмотреть все ваши инструкции create.

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

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

sqlite3> ATTACH database.sqlite as "attached"

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

$sqlite3 database.sqlite
sqlite3> .dump

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

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'

Поскольку никто не упоминал об официальной ссылке на SQLite, я думаю, может быть полезно сослаться на нее под этим заголовком:

https://www.sqlite.org/cli.html

Вы можете манипулировать своей базой данных, используя команды, описанные по этой ссылке.Кроме того, если вы используете ОС Windows и не знаю, где находится командная оболочка, то есть на сайте SQLite:

https://www.sqlite.org/download.html

После загрузки его, нажмите sqlite3.exe файл, чтобы инициализировать командную оболочку SQLite.Когда он инициализирован, по умолчанию этот сеанс SQLite использует базу данных в памяти, а не файл на диске, и поэтому все изменения будут потеряны при завершении сеанса.Чтобы использовать постоянный дисковый файл в качестве базы данных, введите команду ".открыть ex1.db" сразу после запуска окна терминала.

Приведенный выше пример приводит к открытию и использованию файла базы данных с именем "ex1.db", а также к созданию, если он ранее не существовал.Возможно, вы захотите использовать полный путь, чтобы убедиться, что файл находится в каталоге, в котором, по вашему мнению, он находится.Используйте косую черту в качестве разделителя каталогов.Другими словами, используйте "c:/work/ex1.db", а не "c:\work\ex1.db".

Чтобы просмотреть все таблицы в базе данных, которую вы выбрали ранее, введите команду .таблицы как сказано в приведенной выше ссылке.

Если вы работаете в Windows, я думаю, было бы полезно переместить этот sqlite.exe файл в ту же папку, что и другие файлы Python.Таким образом, файл Python выполняет запись в файл, а оболочка SQLite - чтение из файлов .db находятся по одному и тому же пути.

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

.da для просмотра всех баз данных - вызывается одна из них 'Главная'

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top