什么 SQL 可用于列出 SQLite 数据库文件中的表和这些表中的行 - 一旦我使用 SQLite 3 命令行工具上的 ATTACH
命令附加它?
.tables
用于表,.schema ?TABLE?
用于特定表的架构。
.table 'bank_%'
或 .table '%_empl'
也是查询前缀/后缀的有效语法!
有几个步骤可以查看 SQLite 数据库中的表:
列出数据库中的表:.tables 列出表的外观:.schema tablename 打印整个表:SELECT * FROM tablename;列出所有可用的 SQLite 提示命令:.help
.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';
"SELECT name FROM sqlite_master WHERE type='table'"
对我有用
CREATE TEMPORARY TABLE
SQL 命令创建的表。当当前数据库连接关闭时,它们的内容将被删除,并且它们永远不会保存到数据库文件中。
ATTACH "some_file.db" AS my_db;
成功了!
看来您需要通过 sqlite_master 表,如下所示:
SELECT * FROM dbname.sqlite_master WHERE type='table';
然后使用 SELECT
或类似名称手动浏览每个表以查看行。
.DUMP
和 .SCHEMA
命令似乎根本看不到数据库。
.tables
命令更直观
.tables
是否已修改为显示附加数据库中的表?
.tables
命令是否已修改为也显示这些?
要显示所有表格,请使用
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';
cur.execute(""" 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'"];
根据 the documentation,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's answer。
从 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 操作系统并且不知道命令 shell 在哪里,那就是在 SQLite 的站点中:
https://www.sqlite.org/download.html
下载后,点击 sqlite3.exe 文件初始化 SQLite 命令外壳。初始化时,默认情况下,此 SQLite 会话使用内存数据库,而不是磁盘上的文件,因此会话退出时所有更改都将丢失。要将永久磁盘文件用作数据库,请在终端窗口启动后立即输入“.open ex1.db”命令。
上面的示例导致名为“ex1.db”的数据库文件被打开和使用,如果它以前不存在,则创建它。您可能希望使用完整路径名来确保文件位于您认为它所在的目录中。使用正斜杠作为目录分隔符。换句话说,使用“c:/work/ex1.db”,而不是“c:\work\ex1.db”。
要查看您之前选择的数据库中的所有表,请键入命令 .tables,如上述链接中所述。
如果您在 Windows 中工作,我认为将这个 sqlite.exe 文件移动到与其他 Python 文件相同的文件夹可能会很有用。这样,写入的 Python 文件和从 .db 文件读取的 SQLite shell 位于同一路径中。
使用 .da 查看所有数据库 - 一个称为“主数据库”。
该数据库的表可以通过以下方式查看:
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'
在“订单”之前
“.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);
.table
和.tables
都是允许的。就此而言,.ta
也可以,因为 sqlite3 将接受任何明确的命令。根据帮助的命令名称确实是“.tables”(如果有人还在关注的话)。ATTACH '<path>' AS <name>;
打开数据库,.tables
将不会显示表格,但 lasse 的回答会这样做。由于 OP 提到了 ATTACHing,我相信他不接受这个答案是对的。编辑:刚刚注意到安东尼和下面的其他人也指出了这一点。