1296

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

4

17 回答 17

1326

有几个步骤可以查看 SQLite 数据库中的表:

  1. 列出数据库中的表:

    .tables
    
  2. 列出表格的外观:

    .schema tablename
    
  3. 打印整个表格:

    SELECT * FROM tablename;
    
  4. 列出所有可用的 SQLite 提示命令:

    .help
    
于 2008-09-17T13:02:51.940 回答
649

,.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';
于 2008-09-17T13:30:00.113 回答
453

看来您需要通过sqlite_master表,如下所示:

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

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

.DUMPand.SCHEMA命令似乎根本看不到数据库。

于 2008-09-17T13:01:48.433 回答
180

要显示所有表格,请使用

SELECT name FROM sqlite_master WHERE type = "table"

要显示所有行,我想您可以遍历所有表,然后对每个表执行 SELECT *。但也许 DUMP 是你所追求的?

于 2008-09-17T13:06:03.743 回答
73

用于.help检查可用命令。

.table

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

于 2011-08-31T04:13:29.280 回答
46

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
于 2008-09-17T13:06:30.870 回答
39

要列出表格,您还可以执行以下操作:

SELECT name FROM sqlite_master
WHERE type='table';
于 2008-09-17T13:04:57.443 回答
34

试试PRAGMA table_info(table-name);
http://www.sqlite.org/pragma.html#schema

于 2010-06-07T02:53:42.683 回答
31

我使用此查询来获取它:

SELECT name FROM sqlite_master WHERE type='table'

并在 iOS 中使用:

NSString *aStrQuery=[NSString stringWithFormat:@"SELECT name FROM sqlite_master WHERE type='table'"];
于 2015-08-01T15:13:04.030 回答
19

根据文档,相当于 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 的答案

于 2013-01-31T10:47:09.397 回答
16

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

.fullschema

查看您的所有创建语句。

于 2014-09-08T23:59:25.683 回答
12

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

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

sqlite3> ATTACH database.sqlite as "attached"

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

$sqlite3 database.sqlite
sqlite3> .dump
于 2009-01-30T06:19:48.710 回答
11

通过 a union all,将所有表合并到一个列表中。

select name
from sqlite_master 
where type='table'

union all 

select name 
from sqlite_temp_master 
where type='table'
于 2016-10-13T21:48:00.580 回答
10

采用:

import sqlite3

TABLE_LIST_QUERY = "SELECT * FROM sqlite_master where type='table'"
于 2015-10-13T08:07:11.060 回答
8

由于没有人提到 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 位于同一路径中。

于 2015-04-02T21:24:51.820 回答
6

“.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);
于 2008-09-17T13:05:20.203 回答
6

使用.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'

在“订单”之前

于 2017-11-12T10:04:56.950 回答