Reflection 如何获取SQLite数据库表中的列列表?
我希望检索表中的列列表。该数据库是SQLite的最新版本(我相信是3.6)。我正在寻找通过SQL查询实现这一点的代码。与列相关的元数据(例如长度、数据类型等)的额外加分。您要查找的是数据字典。在sqlite中,可以通过查询sqlite_主表(或视图?)找到所有表的列表 要获取列信息,可以使用Reflection 如何获取SQLite数据库表中的列列表?,reflection,sqlite,list,Reflection,Sqlite,List,我希望检索表中的列列表。该数据库是SQLite的最新版本(我相信是3.6)。我正在寻找通过SQL查询实现这一点的代码。与列相关的元数据(例如长度、数据类型等)的额外加分。您要查找的是数据字典。在sqlite中,可以通过查询sqlite_主表(或视图?)找到所有表的列表 要获取列信息,可以使用pragma table\u info(table\u name)语句: sqlite> pragma table_info(people); 0|first_name|varchar|0||0 1|l
pragma table\u info(table\u 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语句的更多信息,请参见。进入sqlite shell:
$ sqlite3 path/to/db.sqlite3
然后直接打
sqlite> .schema
你会得到一切。这里有一个简单的方法:
.schema <table>
.schema
这个问题很老了,但下面的问题还没有提到
在许多情况下,另一种方便的方法是通过以下方式打开标题:
sqlite> .headers on
那么
将在输出的顶部显示一个标题,显示所有选定字段(如果选择*,则全部)。基于上述内容,您可以一次完成所有操作:
sqlite3 yourdb.db ".schema"
这将为您提供创建表的SQL,表实际上是列的列表 我知道,已经很久了,但永远都不会太晚… 我有一个类似的问题,TCL作为翻译,经过几次搜索,没有发现对我有好处的。因此,我基于PRAGMA提出了一些建议,知道您的DB是“main”
db eval { PRAGMA main.table_info(<your table name>) } TBL { puts $TBL(name) }
db eval{PRAGMA main.table_info()}TBL{put$TBL(name)}
和数组用于获取列表
set col_list {}
db eval { PRAGMA main.table_info(<your table name>) } TBL { lappend col_list $TBL(name) }
puts $col_list
set col_list{}
db eval{PRAGMA main.table_info()}TBL{lappend col_list$TBL(name)}
将$col_放入列表
下面是一条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
;
选择m.name作为tableName,
p、 列名称
来自sqlite_master m
左外连接pragma_表信息((m.name))p
关于m.name p.name
按表名、列名排序
;
这是一个查询,它列出了所有表及其列,以及我可以根据OP请求获得的关于每个列的所有元数据(作为额外积分)
伟大的现在,如何从命令行外部执行此操作?这是如何在我自己的C程序中实现的?我如何在Objective中实现上述功能-c@Nag,我认为SQLite应该将这些命令视为普通SQL,进行相应的处理,并返回一个结果集。SQLite不是有一些点快捷方式而不是
select*from
?使用select*from table,当您不知道表中有多少记录可能有百万记录的结果,并且需要时间和资源时。您应该添加“限制1”或类似的内容。这应该是答案。@EhteshChoudhury不应该,问题要求的是SQL查询,而不是SQL查询。问题要求的是SQL查询。谢谢!如果您将orderby
更改为tableName,p.cid
,则可以按模式排序。我想实际问题是sqlite3默认不提供查询头,这就是我们一直在寻找的解决方案。如果您的表格太长,无法在终端上显示,只需添加,例如LIMIT 5
。不要忘记代码>在末尾。
set col_list {}
db eval { PRAGMA main.table_info(<your table name>) } TBL { lappend col_list $TBL(name) }
puts $col_list
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
;
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
SELECT * FROM sqlite_master WHERE type = 'table'