什么 SQL 可用于列出 SQLite 数据库文件中的表以及这些表中的行 - 一旦我将其附加到 ATTACH SQLite 3 命令行工具上的命令?

有帮助吗?

解决方案

.tables, , 和 .schema “helper”函数不查看附加数据库:他们只是查询 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

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

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; 是:

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

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;

但是,如果您要检查单个表是否存在(或获取其详细信息),请参阅 @路易斯杰伦 回答。

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

.fullschema

查看所有创建语句。

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

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

sqlite3> ATTACH database.sqlite as "attached"

从操作系统命令行直接打开数据库:

$sqlite3 database.sqlite
sqlite3> .dump

使用:

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'

由于没有人提到 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”的数据库文件,如果该文件先前不存在,则创建该文件。您可能需要使用完整路径名来确保该文件位于您认为它所在的目录中。使用正斜杠作为目录分隔符。换句话说,使用“c:/work/ex1.db”,而不是“c:\work\ex1.db”。

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

如果您在 Windows 中工作,我认为将此 sqlite.exe 文件移至与其他 Python 文件相同的文件夹可能会很有用。这样,Python 文件写入的 .db 文件和 SQLite shell 读取的 .db 文件都位于同一路径中。

“.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 查看所有数据库 - 一个名为 '主要的'

该数据库的表可以通过以下方式查看

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

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

从中选择不同的tbl_name aa.sqlite_master 按 1 排序;

请注意,您在这里也可以获得视图。要排除这些添加 其中类型 = '表' 在“订单”之前

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top