Как я могу получить список столбцов в таблице для базы данных SQLite? - PullRequest
86 голосов
/ 03 марта 2009

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

Ответы [ 8 ]

113 голосов
/ 03 марта 2009

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

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

Для получения дополнительной информации о прагматических утверждениях см. Документацию .

47 голосов
/ 10 февраля 2012

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

.schema <table>
21 голосов
/ 21 ноября 2013

Вопрос старый, но еще не упомянуто следующее.

Другим удобным способом во многих случаях является включение заголовков:

sqlite> .headers on

Тогда

sqlite> SELECT ... FROM table

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

16 голосов
/ 03 марта 2009

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

$ sqlite3 path/to/db.sqlite3

, а затем просто нажмите

sqlite> .schema

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

9 голосов
/ 27 мая 2018

Вот инструкция 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
;
2 голосов
/ 01 ноября 2018

Это запрос, который перечисляет все таблицы с их столбцами и все метаданные, которые я мог получить о каждом столбце, как запрошенный 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'
1 голос
/ 27 апреля 2016

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

sqlite3 yourdb.db ".schema"

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

0 голосов
/ 15 июля 2017

Я знаю, это было давно, но никогда не поздно ... У меня был похожий вопрос с 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...