Есть ли SQLite, эквивалентный описанию MySQL DESCRIBE [таблица]?

327

Я только начинаю изучать SQLite. Было бы неплохо видеть детали таблицы, например MySQL DESCRIBE [table]. PRAGMA table_info [table] недостаточно хорош, так как он имеет только базовую информацию (например, он не показывает, является ли столбец каким-то полем или нет). Есть ли у SQLite способ сделать это?

Теги:
sqlite3

5 ответов

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

утилита командной строки SQLite имеет команду .schema TABLENAME, которая показывает вам операторы create.

  • 60
    Вы можете использовать «.schema» без таблицы, и он покажет вам все из них.
  • 40
    Не забудьте пропустить точку с запятой в конце утверждения
Показать ещё 8 комментариев
218
PRAGMA table_info([tablename]);
  • 18
    Это кажется более эквивалентным описанию MySQL, чем .schema tablename для меня.
  • 2
    Ага. Это сработало для меня. .schema TABLENAME нет. Однако только .schema покажет вам все операторы create, но результат от PRAGMA будет гораздо полезнее, если я просто захочу взглянуть на одну таблицу.
Показать ещё 8 комментариев
95

Вы ищете SQL, который используется для создания таблицы? Для этого вы можете запросить таблицу sqlite_master:

sqlite> CREATE TABLE foo (bar INT, quux TEXT);
sqlite> SELECT * FROM sqlite_master;
table|foo|foo|2|CREATE TABLE foo (bar INT, quux TEXT)
sqlite> SELECT sql FROM sqlite_master WHERE name = 'foo';
CREATE TABLE foo (bar INT, quux TEXT)
  • 0
    Есть ли разница между этим и .schema foo ?
  • 15
    @Matthew: .schema можно использовать только из командной строки; Вышеуказанные команды могут быть запущены как запрос через библиотеку (Python, C # и т. д.).
Показать ещё 4 комментария
45

Чтобы просмотреть все таблицы:

.tables

Чтобы увидеть конкретную таблицу:

.schema [tablename]
5

Чтобы люди не ошиблись в комментариях к другим ответам:

  • Если .schema или query from sqlite_master не выдаёт никакого вывода, это указывает на несуществующий tablename, например. это также может быть вызвано точкой с запятой ; в конце для .schema, .tables,... Или просто потому, что таблица действительно не существует. То, что .schema просто не работает, маловероятно, и тогда в проекте sqlite должен быть отправлен отчет об ошибке.

....схема может использоваться только из командной строки; приведенные выше команды > могут выполняться как запрос через библиотеку (Python, С# и т.д.). - Марк Рушаков Jul 25 '10 в 21:09

  1. 'может использоваться только из командной строки' может ввести людей в заблуждение. Почти любой (вероятно, каждый?) Язык программирования может вызывать другие программы/команды. Поэтому цитируемый комментарий не повезло, так как вызов другой программы, в данном случае sqlite, скорее всего, будет поддерживаться, чем тот, который предоставляет wrapper/library для каждой программы (что не только подвержено незавершенности сама природа масс программ там, но и противодействует single-source principle, усложняя maintenance, способствуя хаосу данных в мире).

(Поставьте в качестве ответа, поскольку пока не разрешено прокомментировать.)

  • 0
    Любой, кто пишет программу для извлечения данных из любой базы данных SQL, должен использовать надлежащие драйверы SQL, доступные для их языка программирования, для доступа к базе данных и выполнения запросов к ней. Это подходящий способ доступа к базе данных. Я бы никогда не порекомендовал взломать программу командной строки, предназначенную для специальных запросов. Ваше предложение глубоко ошибочно. Программа командной строки для специальных запросов, безусловно, НЕ является наиболее подходящей точкой доступа для программного кода для выполнения запросов к базе данных. Использование драйверов SQL, безусловно, НЕ «усложняет обслуживание» - это лучшая практика.
  • 0
    Я согласен, что это не плохо, это похоже на библиотеки. Вот почему Linux | BSD распространяет диспетчеры пакетов. И почему там 0install кроссплатформенный PM. Я просто хотел уточнить, что не всем программам нужны обертки. Это не имеет смысла каждый раз. В этом случае (обработка БД), конечно, неплохо использовать обертку.

Ещё вопросы

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