【发布时间】:2010-10-10 22:26:37
【问题描述】:
我希望检索表中的列列表。该数据库是 SQLite 的最新版本(我相信是 3.6)。我正在寻找使用 SQL 查询执行此操作的代码。与列相关的元数据(例如长度、数据类型等)的额外奖励积分
【问题讨论】:
标签: reflection sqlite list
我希望检索表中的列列表。该数据库是 SQLite 的最新版本(我相信是 3.6)。我正在寻找使用 SQL 查询执行此操作的代码。与列相关的元数据(例如长度、数据类型等)的额外奖励积分
【问题讨论】:
标签: reflection sqlite list
您要查找的内容称为数据字典。在 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 语句的更多信息,请参阅documentation。
【讨论】:
select * from ?
进入你的 sqlite shell:
$ sqlite3 path/to/db.sqlite3
然后直接点击
sqlite> .schema
你会得到一切。
【讨论】:
下面是简单的方法:
.schema <table>
【讨论】:
这个问题很老,但尚未提及以下问题。
在许多情况下,另一种方便的方法是通过以下方式打开标题:
sqlite> .headers on
那么,
sqlite> SELECT ... FROM table
将在输出顶部显示一个标题,显示所有选定的字段(如果您选择 *,则全部显示)。
【讨论】:
LIMIT 5。不要忘记最后的;。
在上述基础上,您可以一次完成所有操作:
sqlite3 yourdb.db ".schema"
这将为您提供创建表的 SQL,该表实际上是列的列表。
【讨论】:
我知道,已经很久了,但永远不会太晚...... 我与 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
【讨论】:
这是一个列出当前数据库中所有表和列的 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
;
【讨论】:
ORDER BY 更改为 tableName, p.cid,则可以按架构订购。
这是一个查询,列出了所有表及其列,以及我可以根据 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'
【讨论】: