当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何列出使用ATTACH打开的SQLite数据库文件中的表?》经验,为你挑选了16个好方法。

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



1> 小智..:

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

    列出数据库中的表:

    .tables
    

    列出表格的外观:

    .schema tablename
    

    打印整个表格:

    SELECT * FROM tablename;
    

    列出所有可用的SQLite提示命令:

    .help
    


`.table`和`.tables`都是允许的.就此而言,`.ta`也可以,因为sqlite3将接受任何明确的命令.根据帮助的命令名称确实是".表"(如果有人仍在关注).
(这应该是公认的答案,它是最常用的做事方式).
如果通过`ATTACH''AS 打开数据库,`.tables`将不显示表;`但是lasse的答案就是这样.由于OP提到ATTACHing,我相信他不接受这个答案是正确的.编辑:刚才注意到安东尼和其他人也指出了这一点.
@dbw:不一定。考虑您正在做一个能够使用SQLite或MySql的数据库包装器(我的情况)。如果您使用DB供应商特定的命令,则使用更多符合SQL的命令将使移植其他语言的包装更加容易。

2> Anthony Will..:

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


只有`"SELECT name FROM sqlite_master WHERE type ='table'"`对我有用
SELECT name FROM my_db.sqlite_master WHERE type ='table'; 这对我(对于附加的数据库)不起作用,并且它会抛出错误:不存在这样的表"my_db.sqlite_master"

3> angry person..:

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

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

然后手动浏览每个表格SELECT或类似的表格来查看行.

.DUMP.SCHEMA命令不会出现看到数据库的.


不容易阅读或记住将来使用的东西; 内置的`.tables`命令更直观
@Gryllida:尽管这可以从任何SQL-API中使用,因为它是valide SQL.可能无法随处支持内置命令.
*在该数据库*中,是的,但这个问题是关于在您附加的数据库中显示表格.是否已修改`.tables`命令以显示这些命令?
卫生署!阅读理解失败......我不知道怎么设法找不到ATTACH参考......两次> _ <
@DoktorJ是否已修改`.tables`以显示附加数据库中的表?

4> Christian Da..:

要显示所有表格,请使用

SELECT name FROM sqlite_master WHERE type = "table"

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


感谢真正解决问题的唯一答案......"什么SQL",而不是什么命令可以使用...谢谢!

5> 小智..:

使用.help检查可用的命令.

.table

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



6> 小智..:

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



7> Rafał Dowgir..:

要列出表格,您还可以:

SELECT name FROM sqlite_master
WHERE type='table';



8> Luiz Geron..:

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


这仅在您知道表的名称时才有效.您不能使用它来获取表名列表.
这可能是最好的方法。

9> GameLoading..:

我使用此查询来获取它:

SELECT name FROM sqlite_master WHERE type='table'

并在iOS中使用:

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



10> Alix Axel..:

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



11> pepper..:

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

.fullschema

查看所有的create语句.


您正在使用2012年的版本

12> Noah..:

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

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

sqlite3> ATTACH database.sqlite as "attached"

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

$sqlite3 database.sqlite
sqlite3> .dump



13> Mrityunjay S..:

使用:

import sqlite3

TABLE_LIST_QUERY = "SELECT * FROM sqlite_master where type='table'"



14> openwonk..:

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

select name
from sqlite_master 
where type='table'

union all 

select name 
from sqlite_temp_master 
where type='table'



15> oiyio..:

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



16> 小智..:

".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);

推荐阅读
帆侮听我悄悄说星星
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有