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

我希望检索表中的列列表。该数据库是 SQLite 的最新版本(我相信是3.6)。我正在寻找的代码,这与一个 SQL 查询。与列相关的元数据(例如长度、数据类型等)的额外加分。.)

124704 次浏览

你要找的东西叫做数据字典。在 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

有关杂注语句的更多信息,请参见 文件

只要进入你狭小的外壳:

$ sqlite3 path/to/db.sqlite3

然后直接撞上去

sqlite> .schema

你会得到一切。

这里有一个简单的方法:

.schema <table>

这个问题已经很老了,但是下面的内容还没有被提及。

在许多情况下,另一种方便的方法是通过以下方式打开头文件:

sqlite> .headers on

然后,

sqlite> SELECT ... FROM table

将在输出的顶部显示一个标题,其中显示所有选定字段(如果选择 * ,则为所有字段)。

在上述基础上,你可以一次性完成所有工作:

sqlite3 yourdb.db ".schema"

这将为您提供创建表的 SQL,表实际上是列的列表。

我知道,已经过去很久了,但是永远不会太晚。 我有一个类似的问题与 TCL 作为翻译和几次搜索后,发现没有什么对我有好处。所以我提出了一些基于 PRAGMA 的东西,知道你的数据库是“主要的”

db eval { PRAGMA main.table_info(<your table name>) } TBL { puts $TBL(name) }

和 array 用于获取列表

set col_list {}
db eval { PRAGMA main.table_info(<your table name>) } TBL { lappend col_list $TBL(name) }
puts $col_list

下面是列出当前数据库中所有表和列的 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
;

这是一个查询,列出了所有表及其列,以及根据 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 * FROM sqlite_master WHERE type = 'table'

如果希望将所有列名放入一个逗号分隔的字符串中,可以使用以下命令。

SELECT GROUP_CONCAT(NAME,',') FROM PRAGMA_TABLE_INFO('table_name')

这里使用 杂注表 _ 信息作为 select 语句的 杂注 _ table _ info,GROUP _ CONCAT 将所有字段名组合成一个字符串。对于 GROUP _ CONCAT 的第二个参数,可以传递分隔符。