首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQLite架构信息元数据

SQLite架构信息元数据
EN

Stack Overflow用户
提问于 2011-06-24 05:14:42
回答 7查看 86.2K关注 0票数 51

我需要在SQLite数据库中获取列名和它们的表。我需要的是一个包含两列的结果集:table_name | column_name

在MySQL中,我可以通过对数据库INFORMATION_SCHEMA执行SQL查询来获得这些信息。但是,SQLite提供了表sqlite_master

代码语言:javascript
复制
sqlite> create table students (id INTEGER, name TEXT);
sqlite> select * from sqlite_master;
  table|students|students|2|CREATE TABLE students (id INTEGER, name TEXT)

这将导致一个对我没有帮助的动态链接库构造查询(CREATE TABLE),我需要对其进行解析以获取相关信息。

我需要获取表的列表,并使用列连接它们,或者只获取列和表名列。所以PRAGMA table_info(TABLENAME)不适合我,因为我没有表名。我想要获取数据库中的所有列元数据。

有没有更好的方法通过查询数据库来获取这些信息作为结果集?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2011-07-08 06:13:27

你基本上已经在你的问题中命名了解决方案。

要获取表(和视图)的列表,请按如下所示查询sqlite_master

代码语言:javascript
复制
SELECT name, sql FROM sqlite_master
WHERE type='table'
ORDER BY name;

(参见the SQLite FAQ)

要获取有关特定表中列的信息,请按照the SQLite PRAGMA documentation中的说明使用PRAGMA table_info(table-name);

我不知道有什么方法可以将tablename|columnname作为单个查询的结果返回。我不相信SQLite支持这一点。最好的方法可能是同时使用这两种方法来返回您要查找的信息-首先使用sqlite_master获取表列表,然后使用PRAGMA table_info()遍历它们以获取它们的列。

票数 93
EN

Stack Overflow用户

发布于 2018-11-06 02:47:47

最新版本的SQLite允许您select against PRAGMA results now,这使得这很容易:

代码语言:javascript
复制
SELECT 
  m.name as table_name, 
  p.name as column_name
FROM 
  sqlite_master AS m
JOIN 
  pragma_table_info(m.name) AS p
ORDER BY 
  m.name, 
  p.cid

其中,p.cid保存CREATE TABLE语句的列顺序,即零索引。

David Garoutte回答了这个here,但是这个SQL应该执行得更快,并且列是按模式排序的,而不是按字母顺序排序的。

请注意,table_info还包含

  • type (数据类型,如integertext),
  • notnull (如果列具有缺省constraint)
  • dflt_value,则为1(如果没有缺省键,则为NOT NULL (如果列是表的主键,则为1,否则为0)

实时调频:https://www.sqlite.org/pragma.html#pragma_table_info

票数 16
EN

Stack Overflow用户

发布于 2011-06-24 06:49:43

有".tables“和".schema table_name”命令,它们为你从"select * from sqlite_master;“得到的结果提供了一种独立的版本。

还有“杂注table_info(table_name);”命令可以获得更好的解析结果,而不是构造查询:

代码语言:javascript
复制
sqlite> .tables
students
sqlite> .schema students
create table students(id INTEGER, name TEXT);
sqlite> pragma table_info(students);
0|id|INTEGER|0||0
1|name|TEXT|0||0

希望,这在某种程度上是有帮助的。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6460671

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档