如何列出使用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数据库中的表:
-
列出数据库中的表格:
.tables
-
列出表格的外观:
.schema tablename
-
打印整个表格:
SELECT * FROM tablename;
-
列出所有可用的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 '