什么SQL可用于列出表,以及SQLite数据库文件中这些表中的行 - 一旦我ATTACH
在SQLite 3命令行工具上附加了命令?
在SQLite数据库中查看表有几个步骤:
列出数据库中的表:
.tables
列出表格的外观:
.schema tablename
打印整个表格:
SELECT * FROM tablename;
列出所有可用的SQLite提示命令:
.help
在.tables
和.schema
"辅助"功能不考虑附加的数据库:他们只是查询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_master表,如下所示:
SELECT * FROM dbname.sqlite_master WHERE type='table';
然后手动浏览每个表格SELECT
或类似的表格来查看行.
在.DUMP
与.SCHEMA
命令不会出现看到数据库的.
要显示所有表格,请使用
SELECT name FROM sqlite_master WHERE type = "table"
为了显示所有行,我猜你可以遍历所有表,并在每个表上执行SELECT*.但也许DUMP就是您追求的目标?
使用.help
检查可用的命令.
.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
要列出表格,您还可以:
SELECT name FROM sqlite_master WHERE type='table';
请尝试PRAGMA table_info(table-name);
http://www.sqlite.org/pragma.html#schema
我使用此查询来获取它:
SELECT name FROM sqlite_master WHERE type='table'
并在iOS中使用:
NSString *aStrQuery=[NSString stringWithFormat:@"SELECT name FROM sqlite_master WHERE type='table'"];
根据文档,相当于MySQL的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
查看所有的create语句.
最简单的方法是直接打开数据库并使用.dump
命令,而不是在调用SQLite 3 shell工具后附加它.
所以...(假设您的操作系统命令行提示符为$)而不是$sqlite3
:
sqlite3> ATTACH database.sqlite as "attached"
从您的OS命令行,直接打开数据库:
$sqlite3 database.sqlite sqlite3> .dump
使用:
import sqlite3 TABLE_LIST_QUERY = "SELECT * FROM sqlite_master where type='table'"
通过a union all
,将所有表组合成一个列表.
select name from sqlite_master where type='table' union all select name from sqlite_temp_master where type='table'
由于没有人提到SQLite的官方参考,我认为在这个标题下引用它可能是有用的:
https://www.sqlite.org/cli.html
您可以使用此链接中描述的命令操作数据库.此外,如果您使用的是Windows操作系统,并且不知道命令shell的位置,那就在SQLite的站点中:
https://www.sqlite.org/download.html
下载后,单击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读取位于同一路径中.
".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);