繁体   English   中英

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

[英]How can I list the tables in a SQLite database file that was opened with ATTACH?

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

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

  1. 列出数据库中的表:

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

     .schema tablename
  3. 打印整个表:

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

     .help

.tables.schema “辅助”功能不考虑附加的数据库:他们只是查询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_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; 是:

“.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

通过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 操作系统并且不知道命令外壳在哪里,那就是在 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 文件写入和 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查看所有数据库 - 一个称为“ 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'

在“订单”之前

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM