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


看起来你需要遍历sqlite_master表,就像这样:

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

然后用SELECT或类似的方法手动遍历每个表以查看行。

. dump和. schema命令似乎根本看不到数据库。


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

列出数据库中的表: .tables 列出表格的外观: . schema的表 打印整个表格: SELECT * FROM tablename; 列出所有可用的SQLite提示命令: .help


要列出表格,您还可以这样做:

SELECT name FROM sqlite_master
WHERE type='table';

”。Schema " commando将列出可用的表及其行,通过显示用于创建上述表的语句:

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“助手”函数不查找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工具后附加它。

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

sqlite3> ATTACH database.sqlite as "attached"

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

$sqlite3 database.sqlite
sqlite3> .dump

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


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

.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

查看所有的create语句。


由于没有人提到SQLite的官方引用,我认为在以下标题下引用它可能是有用的:

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

可以使用此链接中描述的命令操作数据库。此外,如果你使用的是Windows操作系统,不知道命令shell在哪里,那就是在SQLite的网站上:

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

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

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

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

如果你在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'"];

Use:

import sqlite3

TABLE_LIST_QUERY = "SELECT * 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”。

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

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'

在order之前