Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何列出使用ATTACH打开的SQLite数据库文件中的表?_Sql_Database_Sqlite_Metadata - Fatal编程技术网

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

如何列出使用ATTACH打开的SQLite数据库文件中的表?,sql,database,sqlite,metadata,Sql,Database,Sqlite,Metadata,什么样的SQL可以用于列出SQLite数据库文件中的表以及这些表中的行?一旦我使用SQLite 3命令行工具上的ATTACH命令将其附加,您似乎需要遍历SQLite_主表,如下所示: SELECT * FROM dbname.sqlite_master WHERE type='table'; 然后使用SELECT或类似工具手动浏览每个表以查看行 .DUMP和.SCHEMA命令似乎根本看不到数据库。查看SQLite数据库中的表有几个步骤: .tables 列出数据库中的表: .tables

什么样的SQL可以用于列出SQLite数据库文件中的表以及这些表中的行?一旦我使用SQLite 3命令行工具上的ATTACH命令将其附加,您似乎需要遍历SQLite_主表,如下所示:

SELECT * FROM dbname.sqlite_master WHERE type='table';
然后使用SELECT或类似工具手动浏览每个表以查看行


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

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

.tables
列出数据库中的表:

.tables
列出表格的外观:

.schema tablename
打印整个表格:

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

.help

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

SELECT name FROM sqlite_master
WHERE type='table';

.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);
要显示所有表,请使用

SELECT name FROM sqlite_master WHERE type = "table"

要显示所有行,我想您可以遍历所有表,只需对每个表执行SELECT*。但是,您可能想要的是转储?

在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
.tables和.schema helper函数不查看附加的数据库:它们只是查询主数据库的SQLITE_主表。因此,如果您使用

ATTACH some_file.db AS my_db;
那么你需要做什么

SELECT name FROM my_db.sqlite_master WHERE type='table';
请注意,临时表也不会与.tables一起显示:您必须为此列出sqlite\u temp\u master:

SELECT name FROM sqlite_temp_master WHERE type='table';

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

所以。。。假设您的OS命令行提示符是$sqlite3而不是$sqlite3:

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

$sqlite3 database.sqlite
sqlite3> .dump
试试PRAGMA table_infotable-name; 使用。帮助检查可用命令

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

根据,相当于MySQLs的show tables;是:

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


但是,如果要检查是否存在单个表或获取其详细信息,请参阅答案。

对于最新版本的SQLite3,您可以发布:

.fullschema

查看您所有的create语句。

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

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

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

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

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


若您在Windows中工作,我认为将这个sqlite.exe文件和其他Python文件移到同一个文件夹可能会很有用。这样,Python文件写入.db文件和SQLite shell从.db文件读取的路径是相同的。

我使用此查询获取它:

SELECT name FROM sqlite_master WHERE type='table'
并在iOS中使用:

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

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

select name
from sqlite_master 
where type='table'

union all 

select name 
from sqlite_temp_master 
where type='table'

.da以查看所有数据库-一个称为“main”

此数据库的表可以通过

按1从sqlite_主订单中选择不同的tbl_名称

附加的数据库需要您在附加语句中选择的前缀,例如aa、bb、cc。。。因此:

从aa.sqlite\u主订单中选择不同的tbl\u名称,按1

请注意,这里您也可以看到视图。要排除这些,请添加 其中type='table'
在“订购”之前,请尝试使用此工具,您可以获得表的完整信息。如果您感兴趣,以下是sqlite的一个有用GUI:允许您快速查看数据库、表的详细信息,并且还具有一个很好的查询编辑器……表的表和.schema?表?对于特定表的架构,..table'bank_u%'或.table'%\u emp'也是查询前缀/后缀的有效语法!如果您面临nodejs的问题,那么请参考这可能是最好的方法。这只有在您知道表的名称时才有效。无法使用此选项获取表名列表。表和表都是允许的。就这点而言,.ta会像我们一样工作
因为sqlite3将接受任何明确的命令。根据帮助,命令的名称确实是.tables(如果有人还在注意的话)。这应该是公认的答案,这是最sqlite-y的方式。如果通过ATTACH AS打开数据库,表将不会显示表;但拉西的回答就行了。既然OP提到了附件,我相信他没有接受这个答案是正确的。编辑:刚才注意到anthony和下面的其他人也指出了这一点。@dbw:不一定。考虑你正在做一个DB包装器,可以使用SQLite或MySQL我的例子。如果使用DB供应商特定的命令,则使用更多符合SQL的命令将更容易以其他语言移植包装的文件。此答案缺少上下文,因此没有帮助。不容易阅读或记住以备将来使用;builtin.tables命令更简单intuitive@Gryllida:尽管如此,它仍然可以从任何SQL-API使用,因为它是有效的SQL。可能并非所有地方都支持内置命令。@DoktorJ是否已将表修改为显示附加数据库中的表?在该数据库中,是的,但此问题是关于显示附加数据库中的表。是否修改了.tables命令以显示这些内容?Doh!阅读理解失败。。。不知怎的,我没能抓住附加的参考资料。。。两次>\u感谢您给出的唯一真正解决问题的答案。。。可以使用什么SQL,而不是什么命令。。。谢谢此外,这会每行打印一个表名,而.tables会打印多列表名,这些表名很烦人/不有用。SQLite版本3.7.13 2012-07-17 17:46:21 Enter。有关说明的帮助,请输入以字符结尾的SQL语句;sqlite>.fullschema错误:未知命令或无效参数:fullschema。输入.help for help您使用的是2012年的版本,仅从类型为class='table'的sqlite_master中选择名称,从类型为class='table'的my_db.sqlite_master中选择名称;对于附加的数据库,这不适用于我,它会抛出错误:没有这样的表存在my_DB.sqlite_master您所说的临时表是什么意思?当我刚刚打开SQLite db文件时,是否有临时表?临时表是使用CREATE TEMPORATE TABLE SQL命令创建的表。当当前数据库连接关闭时,它们的内容将被删除,并且永远不会保存到数据库文件中;成功了!奇怪,它一定是正确的,但当我用它来。。。cur.execute从sqlite_master中选择名称,其中type='table';还是不?这对我不起作用,但我不确定这段代码应该在哪里运行。
import sqlite3

TABLE_LIST_QUERY = "SELECT * FROM sqlite_master where type='table'"
select name
from sqlite_master 
where type='table'

union all 

select name 
from sqlite_temp_master 
where type='table'