Как получить список столбцов в таблице для базы данных SQLite?

Я ищу, чтобы получить список столбцов в таблице. База данных является последней версией SQLite (3.6, я считаю). Я ищу код, который делает это с помощью SQL-запроса. Дополнительные бонусные баллы за метаданные, связанные со столбцами (например, длина, тип данных и т. д...)

7 ответов


то, что вы ищете называется словарем данных. В sqlite список всех таблиц можно найти, запросив таблицу sqlite_master (или представление?)

sqlite> create table people (first_name varchar, last_name varchar, email_address varchar);
sqlite> select * from sqlite_master;
table|people|people|2|CREATE TABLE people (first_name varchar, last_name varchar, email_address varchar)

чтобы получить информацию о столбце, вы можете использовать pragma table_info(table_name) о себе:

sqlite> pragma table_info(people);
0|first_name|varchar|0||0
1|last_name|varchar|0||0
2|email_address|varchar|0||0

дополнительные сведения о операторах pragma см. В разделе документация.


вот простой способ:

.schema <table>

просто зайдите в свою оболочку sqlite:

$ sqlite3 path/to/db.sqlite3

и затем нажмите

sqlite> .schema

и вы получите все.


вопрос старый, но следующее еще не упоминалось.

еще один удобный способ во многих случаях-включить заголовки:

sqlite> .headers on

затем,

sqlite> SELECT ... FROM table

отобразит заголовок, показывающий все выбранные поля (все, если вы выберете *) в верхней части вывода.


вот инструкция SELECT, в которой перечислены все таблицы и столбцы в текущей базе данных:

SELECT m.name as tableName, 
       p.name as columnName
FROM sqlite_master m
left outer join pragma_table_info((m.name)) p
     on m.name <> p.name
order by tableName, columnName
;

основываясь на вышеизложенном, вы можете сделать все это сразу:

sqlite3 yourdb.db ".schema"

Это даст вам SQL для создания таблицы, которая фактически является списком столбцов.


Я знаю, прошло много времени, но никогда не поздно… У меня был аналогичный вопрос с TCL в качестве переводчика и после нескольких поисков, не нашел ничего хорошего для меня. Поэтому я предлагаю что-то, основанное на PRAGMA, зная, что ваша БД "main"

db eval { PRAGMA main.table_info(<your table name>) } TBL { puts $TBL(name) }

и использование массива для получения списка

set col_list {}
db eval { PRAGMA main.table_info(<your table name>) } TBL { lappend col_list $TBL(name) }
puts $col_list