Как я могу получить список столбцов в таблице для базы данных SQLite?
Я ищу, чтобы получить список столбцов в таблице. База данных является последней версией SQLite (я думаю, 3.6). Я ищу код, который делает это с запросом SQL. Дополнительные бонусные баллы за метаданные, связанные со столбцами (например, длина, тип данных и т. Д.)
9 ответов
То, что вы ищете, называется словарь данных. В 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
Для получения дополнительной информации о прагматических утверждениях см. Документацию.
Вопрос старый, но следующее еще не упомянуто.
Во многих случаях другим удобным способом является включение заголовков:
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
;
Просто зайдите в свою оболочку sqlite:
$ sqlite3 path/to/db.sqlite3
а затем просто нажмите
sqlite> .schema
и вы получите все.
Это запрос, в котором перечислены все таблицы с их столбцами и все метаданные, которые я мог получить о каждом столбце в виде запроса OP (в виде бонусных баллов).
SELECT
m.name AS table_name,
p.cid AS col_id,
p.name AS col_name,
p.type AS col_type,
p.pk AS col_is_pk,
p.dflt_value AS col_default_val,
p.[notnull] AS col_is_not_null
FROM sqlite_master m
LEFT OUTER JOIN pragma_table_info((m.name)) p
ON m.name <> p.name
WHERE m.type = 'table'
ORDER BY table_name, col_id
Спасибо @David Garoutte за то, что показали мне, как получить pragma_table_info
работать в запросе.
Запустите этот запрос, чтобы увидеть все метаданные таблицы:
SELECT * sqlite_master WHERE type = 'table'
В случае, если вы хотите получить все имена столбцов в одну строку, разделенную запятыми, вы можете использовать ниже.
SELECT GROUP_CONCAT(NAME,',') FROM PRAGMA_TABLE_INFO('table_name')
Здесь прагма table_info используется как pragma_table_info для оператора select, а GROUP_CONCAT предназначена для объединения всех имен полей в одну строку. для второго параметра GROUP_CONCAT вы можете передать разделитель.
Опираясь на вышесказанное, вы можете сделать все сразу:
sqlite3 yourdb.db ".schema"
Это даст вам SQL для создания таблицы, которая фактически является списком столбцов.
Я знаю, это было давно, но никогда не поздно... У меня был похожий вопрос с TCL в качестве переводчика, и после нескольких поисков я не нашел ничего хорошего для меня. Поэтому я предлагаю что-то на основе PRAGMA, зная, что ваша БД является "основной"
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