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

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

1131645 次浏览

看起来你需要遍历sqlite_master表,如下所示:

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

然后手动遍历每个带有SELECT或类似值的表以查看行。

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

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

  1. 列出数据库中的表:

    .tables
  2. List how the table looks:

    .schema tablename
  3. Print the entire table:

    SELECT * FROM tablename;
  4. List all of the available SQLite prompt commands:

    .help

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

SELECT name FROM sqlite_masterWHERE type='table';

“. Schema”突击队将通过向您显示用于创建上述表的语句来列出可用表及其行:

sqlite> create table_a (id int, a int, b int);sqlite> .schema table_aCREATE TABLE table_a (id int, a int, b int);

要显示所有表,请使用

SELECT name FROM sqlite_master WHERE type = "table"

为了显示所有行,我想你可以遍历所有表并对每个表执行SELECT*。但也许DUMP是你想要的?

在SQLite命令行上有一个可用的命令:

.tables ?PATTERN?      List names of tables matching a LIKE pattern

它转换为以下SQL:

SELECT name FROM sqlite_masterWHERE type IN ('table','view') AND name NOT LIKE 'sqlite_%'UNION ALLSELECT name FROM sqlite_temp_masterWHERE type IN ('table','view')ORDER BY 1

.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';

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

所以…(假设您的OS命令行提示符是$)而不是$sqlite3

sqlite3> ATTACH database.sqlite as "attached"

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

$sqlite3 database.sqlitesqlite3> .dump

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

使用.help检查可用命令。

.table

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

根据留档,相当于MySQL的SHOW TABLES;是:

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

SELECT name FROM sqlite_masterWHERE type IN ('table','view') AND name NOT LIKE 'sqlite_%'UNION ALLSELECT name FROM sqlite_temp_masterWHERE type IN ('table','view')ORDER BY 1;

但是,如果您正在检查是否存在单个表(或获取其详细信息),请参阅LuizGeron的回答

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

.fullschema

以查看所有创建语句。

由于没有人提到SQLite的官方参考,我认为在这个标题下引用它可能会很有用:

https://www.sqlite.org/cli.html

您可以使用此链接中描述的命令操作您的数据库。此外,如果您使用的是Windows OS和不知道命令shell在哪里,即在SQLite的站点中:

https://www.sqlite.org/download.html

下载后,单击sqlite3.exe文件初始化SQLite命令shell。初始化时,默认情况下,此SQLite会话使用内存数据库,而不是磁盘上的文件,因此会话退出时所有更改都将丢失。要使用持久磁盘文件作为数据库,请在终端窗口启动后立即输入“. openex1.db”命令。

上面的示例将打开并使用名为“ex1.db”的数据库文件,如果它以前不存在,则创建该文件。您可能希望使用完整的路径名来确保文件位于您认为它所在的目录中。使用正斜杠作为目录分隔符。换句话说,使用“c:/work/ex1.db”,而不是“c:\work\ex1.db”。

要查看您之前选择的数据库中的所有表,请键入上面链接中所述的命令.表格

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

我使用这个查询来获取它:

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 namefrom sqlite_masterwhere type='table'
union all
select namefrom sqlite_temp_masterwhere type='table'

使用. da查看所有数据库-一个称为“主要”。

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

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'

“订单”之前