什么 SQL 可用于列出表,以及 SQLite 数据库文件中这些表中的行 - 一旦我使用ATTACH
SQLite 3 命令行工具上的命令附加它?
17 回答
有几个步骤可以查看 SQLite 数据库中的表:
列出数据库中的表:
.tables
列出表格的外观:
.schema tablename
打印整个表格:
SELECT * FROM tablename;
列出所有可用的 SQLite 提示命令:
.help
,.tables
和.schema
"helper" 函数不查看 ATTACHed 数据库:它们只是查询SQLITE_MASTER
表中的 "main" 数据库。因此,如果您使用
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';
然后用 a 或类似的方法手动遍历每个表SELECT
以查看行。
.DUMP
and.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
查看您的所有创建语句。
最简单的方法是直接打开数据库并使用.dump
命令,而不是在调用 SQLite 3 shell 工具后附加它。
所以...(假设您的操作系统命令行提示符是 $)而不是$sqlite3
:
sqlite3> ATTACH database.sqlite as "attached"
从您的操作系统命令行,直接打开数据库:
$sqlite3 database.sqlite
sqlite3> .dump
通过 a union all
,将所有表合并到一个列表中。
select name
from sqlite_master
where type='table'
union all
select name
from sqlite_temp_master
where type='table'
采用:
import sqlite3
TABLE_LIST_QUERY = "SELECT * FROM sqlite_master where type='table'"
由于没有人提到 SQLite 的官方参考,我认为在此标题下参考它可能会很有用:
https://www.sqlite.org/cli.html
您可以使用此链接中描述的命令来操作数据库。此外,如果您使用的是 Windows 操作系统并且不知道命令 shell 在哪里,那就是在 SQLite 的站点中:
https://www.sqlite.org/download.html
下载完成后,点击 sqlite3.exe 文件初始化 SQLite 命令外壳。初始化时,默认情况下,此 SQLite 会话使用内存数据库,而不是磁盘上的文件,因此会话退出时所有更改都将丢失。要将永久磁盘文件用作数据库,请在终端窗口启动后立即输入“.open ex1.db”命令。
上面的示例导致名为“ex1.db”的数据库文件被打开和使用,如果它以前不存在,则创建它。您可能希望使用完整路径名来确保文件位于您认为它所在的目录中。使用正斜杠作为目录分隔符。换句话说,使用“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);
使用.da查看所有数据库 - 一个称为“ main ”。
该数据库的表可以通过以下方式查看:
SELECT distinct tbl_name from sqlite_master order by 1;
附加的数据库需要您在 ATTACH 语句中使用 AS 选择的前缀,例如aa (, bb, cc...) 所以:
SELECT distinct tbl_name from **aa.sqlite_master** order by 1;
请注意,在这里您也可以获得视图。要排除这些添加:
where type = 'table'
在“订单”之前