如何列出使用ATTACH打开的SQLite数据库文件中的表?

在SQLite数据库文件中,可以使用什么SQL来列出这些表以及这些表中的行 – 我使用SQLite 3命令行工具上的ATTACH命令将其附加到SQLite数据库文件中?

.tables和.schema “helper”函数不会查看ATTACHed数据库:它们只是在SQLITE_MASTER表中查询“主”数据库。 因此,如果你使用

 ATTACH some_file.db AS my_db; 

那么你需要做的

 SELECT name FROM my_db.sqlite_master WHERE type='table'; 

请注意,临时表不会显示.tables :您必须列出sqlite_temp_master

 SELECT name FROM sqlite_temp_master WHERE type='table'; 

有几个步骤来查看SQLite数据库中的表:

  1. 列出数据库中的表格:

     .tables 
  2. 列出表格的外观:

     .schema tablename 
  3. 打印整个表格:

     SELECT * FROM tablename; 
  4. 列出所有可用的SQLite提示符命令:

     .help 

看来你需要通过sqlite_master表,如下所示:

 SELECT * FROM dbname.sqlite_master WHERE type='table'; 

然后用SELECT或类似的手段遍历每个表格以查看行。

.DUMP.SCHEMA命令根本看不到数据库。

要显示所有表格,请使用

 SELECT name FROM sqlite_master WHERE type = "table" 

为了显示所有的行,我猜你可以遍历所有的表,只是做一个SELECT *每一个。 但是,也许DUMP是你以后?

使用.help来检查可用的命令。

 .table 

该命令将显示当前数据库下的所有表。

要列出表格,你也可以这样做:

 SELECT name FROM sqlite_master WHERE type='table'; 

在SQLite命令行上有一个可用的命令:

 .tables ?PATTERN? List names of tables matching a LIKE pattern 

其中转换为以下SQL:

 SELECT name FROM sqlite_master WHERE type IN ('table','view') AND name NOT LIKE 'sqlite_%' UNION ALL SELECT name FROM sqlite_temp_master WHERE type IN ('table','view') ORDER BY 1 

尝试PRAGMA table_info(table-name);
http://www.sqlite.org/pragma.html#schema

根据文档 ,相当于MySQL的SHOW TABLES; TABLE SHOW TABLES; 是:

“.tables”命令类似于设置列表模式,然后执行以下查询:

 SELECT name FROM sqlite_master WHERE type IN ('table','view') AND name NOT LIKE 'sqlite_%' UNION ALL SELECT name FROM sqlite_temp_master WHERE type IN ('table','view') ORDER BY 1; 

但是,如果您正在检查单个表是否存在(或获取其详细信息),请参阅@LuizGeron答案。

截至SQLite 3的最新版本,您可以发出:

 .fullschema 

看到你所有的创build语句。

最简单的方法是直接打开数据库并使用.dump命令,而不是在调用SQLite 3 shell工具后附加它。

所以…(假设你的OS命令行提示符是$)而不是$sqlite3

 sqlite3> ATTACH database.sqlite as "attached" 

从您的OS命令行直接打开数据库:

 $sqlite3 database.sqlite sqlite3> .dump 

我使用这个查询来得到它:

 SELECT name FROM sqlite_master WHERE type='table' 

并在iOS中使用:

 NSString *aStrQuery=[NSString stringWithFormat:@"SELECT name FROM sqlite_master WHERE type='table'"]; 

使用:

 import sqlite3 TABLE_LIST_QUERY = "SELECT * FROM sqlite_master where type='table'" 

通过union all ,将所有表合并成一个清单。

 select name from sqlite_master where type='table' union all select name from sqlite_temp_master where type='table' 

“.schema”命令将通过显示用于创build所述表的语句来列出可用表及其行。

 sqlite>创buildtable_a(id int,一个int,b int);
 sqlite> .schema table_a
 CREATE TABLE table_a(id int,int,b int);

由于没有人提到过SQLite的官方参考,我认为在这个标题下引用它可能是有用的:

https://www.sqlite.org/cli.html

您可以使用此链接中描述的命令来操纵数据库。 另外, 如果您使用的是Windows操作系统,并且不知道命令行界面在哪里,那就在SQLite的站点中:

https://www.sqlite.org/download.html

下载完成后, 点击sqlite3.exe文件,初始化SQLite命令行界面 。 初始化时,默认情况下,此SQLite会话使用的是内存数据库,而不是磁盘上的文件,所以当会话退出时,所有更改都将丢失。 要将永久性磁盘文件用作数据库,请在terminal窗口启动后立即input“.open ex1.db”命令。

上面的例子导致名为“ex1.db”的数据库文件被打开和使用,如果先前不存在,就创build它。 您可能需要使用完整path名来确保文件位于您认为所在的目录中。使用正斜杠作为目录分隔符。 换句话说,使用“c:/work/ex1.db”,而不是“c:\ work \ ex1.db”。

要查看以前select的数据库中的所有表,请按照上述链接中的说明键入命令.tables

如果你在Windows下工作,我认为将这个sqlite.exe文件移动到与其他Python文件相同的文件夹可能是有用的。 通过这种方式,Python文件写入SQLite shell从.db文件读取的path是相同的。

.da查看所有数据库 – 一个名为“

这个数据库的表可以被看到

从sqlite_master顺序select不同的tbl_name 1;

附加数据库需要在语句ATTACH中使用ASselect的前缀,例如aa (,bb,cc …)等等:

aa.sqlite_master顺序中select不同的tbl_name 1;

请注意,在这里你也可以看到视图。 要排除这些在'order'之前添加where type ='table '