我希望检索表中的列列表。该数据库是SQLite的最新版本(3.6,我相信)。我正在寻找使用SQL查询执行此操作的代码。与列相关的元数据的额外奖励积分(例如长度,数据类型等)
答案 0 :(得分:113)
您正在寻找的是数据字典。在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。
答案 1 :(得分:47)
这是一个简单的方法:
.schema <table>
答案 2 :(得分:21)
问题很陈旧,但尚未提及以下内容。
在许多情况下,另一种方便的方法是通过以下方式打开标题:
sqlite> .headers on
然后,
sqlite> SELECT ... FROM table
将显示一个标题,显示输出顶部的所有选定字段(如果您选择SELECT *,则为全部)。
答案 3 :(得分:16)
进入你的sqlite shell:
$ sqlite3 path/to/db.sqlite3
然后点击
sqlite> .schema
你会得到一切。
答案 4 :(得分: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
;
答案 5 :(得分:2)
这是一个查询,其中列出了所有表及其列以及我可以根据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 * sqlite_master WHERE type = 'table'
答案 6 :(得分:1)
基于上述内容,您可以一次完成所有操作:
sqlite3 yourdb.db ".schema"
这将为您提供SQL来创建表,这实际上是列的列表。
答案 7 :(得分: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