提问



在SQLite 3命令行工具上使用ATTACH命令附加SQL时,可以使用哪些SQL来列出表以及SQLite数据库文件中这些表中的行?

最佳参考


.tables.schema帮助器函数不会查看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';

其它参考1


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



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


    .tables
    

  2. 列出表格的外观:


    .schema tablename
    

  3. 打印整张桌子:


    SELECT * FROM tablename;
    

  4. 列出所有可用的SQLite提示命令:


    .help
    


其它参考2


您似乎需要浏览 sqlite_master 表,如下所示:


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


然后用SELECT或类似的方法手动浏览每个表以查看行。


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

其它参考3


要显示所有表格,请使用


SELECT name FROM sqlite_master WHERE type = "table"


为了显示所有行,我猜你可以遍历所有表,并在每个表上执行SELECT *。但也许DUMP就是你追求的东西?

其它参考4


使用.help检查可用命令。


.table


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

其它参考5


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

其它参考6


要列出表格,您还可以:


SELECT name FROM sqlite_master
WHERE type='table';

其它参考7


试试PRAGMA table_info(table-name);

http://www.sqlite.org/pragma.html#schema[38]

其它参考8


根据文档,相同的MySQLSHOW TABLES;是:[39]



  .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答案。

其它参考9


从最新版本的SQLite  3开始,您可以发出:


.fullschema


查看所有创建语句。

其它参考10


我使用此查询来获取它:


SELECT name FROM sqlite_master WHERE type='table'


并在iOS中使用:


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

其它参考11


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


所以...(假设您的操作系统命令行提示符为$)而不是$sqlite3:


sqlite3> ATTACH database.sqlite as "attached"


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


$sqlite3 database.sqlite
sqlite3> .dump

其它参考12


使用:


import sqlite3

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

其它参考13


通过union all,将所有表组合成一个列表。


select name
from sqlite_master 
where type='table'

union all 

select name 
from sqlite_temp_master 
where type='table'

其它参考14


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


https://www.sqlite.org/cli.html[41]


您可以使用此链接中描述的命令操作数据库。此外,如果您使用的是Windows操作系统并且不知道命令shell的位置,那就在SQLite的站点中:


https://www.sqlite.org/download.html[42]


下载后,单击sqlite3.exe文件以初始化SQLite命令shell 。初始化时,默认情况下,此SQLite会话使用的是内存数据库,而不是磁盘上的文件,因此会话退出时所有更改都将丢失。要将永久磁盘文件用作数据库,请在终端窗口启动后立即输入.open ex1.db命令。


上面的示例导致打开并使用名为ex1.db的数据库文件,如果以前不存在则创建该文件。您可能希望使用完整路径名来确保该文件位于您认为所在的目录中。使用forward-slashes作为目录分隔符。换句话说,使用c:/work/ex1.db,而不是c:\\ work \\ ex1.db。


要查看您之前选择的数据库中的所有表,请键入命令 .tables ,如上面的链接中所述。


如果您在Windows中工作,我认为将此sqlite.exe文件与其他Python文件一起移动到同一文件夹可能很有用。通过这种方式,Python文件写入并且.db文件的SQLite shell读取位于同一路径中。

其它参考15


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


sqlite> create table_a (id int, a int, b int);
sqlite> .schema table_a
CREATE TABLE table_a (id int, a int, b int);

其它参考16


.da查看所有数据库 - 一个名为 main 的数据库


可以看到此数据库的表


从sqlite_master顺序中选择不同的tbl_name为1;


附加的数据库需要您在语句ATTACH中选择AS的前缀,例如: aa (,bb,cc ......)所以:


aa.sqlite_master 中选择不同的tbl_name顺序为1;


请注意,您也可以在这里获得视图。要排除这些添加
  其中type =table
在订单之前