如何获取SQLite数据库的表中的列列表?

Ang*_*ker 92 sqlite reflection list

我希望检索表中的列列表.该数据库是SQLite的最新版本(3.6,我相信).我正在寻找使用SQL查询执行此操作的代码.与列相关的元数据的额外奖励积分(例如长度,数据类型等)

Bry*_*yle 122

您正在寻找的是数据字典.在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)
Run Code Online (Sandbox Code Playgroud)

要获取列信息,您可以使用以下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
Run Code Online (Sandbox Code Playgroud)

有关pragma语句的更多信息,请参阅文档.

  • 大!现在如何从命令行外部完成?这是如何从我自己的C程序中完成的? (5认同)
  • @Nag,我认为SQLite应该将这些命令视为普通SQL,相应地处理它,并返回结果集. (2认同)

ifi*_*ime 50

这是一个简单的方法:

.schema <table>
Run Code Online (Sandbox Code Playgroud)

  • @EhteshChoudhury不,它不应该,问题要求SQL查询,这不是一个. (16认同)
  • 这应该是答案. (4认同)

inV*_*der 24

这个问题已经过时了,但尚未提及以下内容.

在许多情况下,另一种方便的方法是打开标题:

sqlite> .headers on
Run Code Online (Sandbox Code Playgroud)

然后,

sqlite> SELECT ... FROM table
Run Code Online (Sandbox Code Playgroud)

将显示一个标题,显示输出顶部的所有选定字段(如果您选择SELECT*).


Maj*_*aby 16

进入你的sqlite shell:

$ sqlite3 path/to/db.sqlite3
Run Code Online (Sandbox Code Playgroud)

然后才打

sqlite> .schema
Run Code Online (Sandbox Code Playgroud)

你会得到一切.

  • 问题是寻找 SQL 查询。 (2认同)

小智 9

这是一个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
;
Run Code Online (Sandbox Code Playgroud)


lew*_*dev 5

这是一个查询,其中列出了所有表及其列以及我可以根据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
Run Code Online (Sandbox Code Playgroud)

感谢@David Garoutte向我展示了如何开始pragma_table_info查询工作。

运行此查询以查看所有表元数据:

SELECT * sqlite_master WHERE type = 'table'
Run Code Online (Sandbox Code Playgroud)