如何列出使用ATTACH打开的SQLite数据库文件中的表?
什么样的SQL可以用于列出SQLite数据库文件中的表以及这些表中的行?一旦我使用SQLite 3命令行工具上的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
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'