it-swarm.cn

如何列出使用连网打开的SQLite的数据库文件中的表?

在SQLite 3命令行工具上使用ATTACH命令附加SQL时,可以使用哪些SQL来列出表以及SQLite数据库文件中这些表中的行?

1113
izb

.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';
524
Anthony Williams

在SQLite数据库中查看表有几个步骤:

  1. 列出数据库中的表:

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

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

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

    .help
    
1233
Mark Janssen

看来你需要通过 sqlite_master table,如下所示:

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

然后使用SELECT或类似方法手动浏览每个表以查看行。

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

433

要显示所有表格,请使用

SELECT name FROM sqlite_master WHERE type = "table"

为了显示所有行,我猜你可以遍历所有表,并在每个表上执行SELECT *。但也许DUMP就是您追求的目标?

153
Christian Davén

使用.help检查可用命令。

.table

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

68
Antony.H

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
40
flubba

要列出表格,您还可以:

SELECT name FROM sqlite_master
WHERE type='table';
36
Rafał Dowgird

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

29
Luiz Geron

我使用此查询来获取它:

SELECT name FROM sqlite_master WHERE type='table'

并在iOS中使用:

NSString *aStrQuery=[NSString stringWithFormat:@"SELECT name FROM sqlite_master WHERE type='table'"];
19
GameLoading

根据 documentation ,相当于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 answer。

15
Alix Axel

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

.fullschema

查看所有的create语句。

15
pepper

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

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

sqlite3> ATTACH database.sqlite as "attached"

从您的OS命令行,直接打开数据库:

$sqlite3 database.sqlite
sqlite3> .dump
11
Noah

通过union all,将所有表组合成一个列表。

select name
from sqlite_master 
where type='table'

union all 

select name 
from sqlite_temp_master 
where type='table'
9
openwonk

使用:

import sqlite3

TABLE_LIST_QUERY = "SELECT * FROM sqlite_master where type='table'"
9
Mrityunjay Singh

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

7
oiyio

“.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); 
5
trf

.da查看所有数据库 - 一个名为' main '

可以看到此数据库的表

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

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

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

请注意,您也可以在这里获得视图。要排除这些添加 其中type ='table' 'order'之前

1
Klaas-Z4us-V