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

72

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

Теги:
list
reflection

6 ответов

98
Лучший ответ

То, что вы ищете, называется словарем данных. В 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 см. в документации .

  • 5
    Большой! Теперь, как это делается вне командной строки? Как это сделать из моей собственной программы на C?
  • 0
    Как я могу реализовать то же, что и выше в Objective-C
Показать ещё 3 комментария
44

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

.schema <table>
  • 4
    Это действительно должен быть ответ.
  • 14
    @EhteshChoudhury нет, это не должно, вопрос требует SQL-запроса, и это не один.
16

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

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

sqlite> .headers on

Затем

sqlite> SELECT ... FROM table

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

  • 0
    Я думаю, правильно, что реальная проблема заключалась в том, что sqlite3 не предоставляет заголовок запроса по умолчанию, тогда это решение, которое мы все искали . Если ваша таблица слишком длинная для отображения на вашем терминале, просто добавьте, например, LIMIT 5 . Не забывайте ; в конце.
16

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

$ sqlite3 path/to/db.sqlite3

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

sqlite> .schema

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

  • 0
    Вопрос ищет запрос SQL.
1

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

sqlite3 yourdb.db ".schema"

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

0

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню