SQLite怎么统计一个数据库中有多少张表,视图或者触发器 .

sqlite数据库中表、视图和触发器的基本信息存储在一张叫做sqlite_master的系统表中,所以要想统计有多少张表就要先学习sqlite_master表。


每一个sqlite数据库都有一张叫做sqlite_master的表,它定义数据库的模式。sqlite_master的表结构如下:

CREATE TABLE sqlite_master (
type TEXT,
name TEXT,
tbl_name TEXT,
rootpage INTEGER,
sql TEXT
);
type字段的内容是数据库单元(不知道这么叫恰不恰当...)的属性,比如table。view,trigger等。如果是一张表的话,type字段的内容是‘table’,name字段则是表的名字,tbl_name对于表没有差别也是表的名字(对于索引才有差别)。rootpage我从网络上搜索了很多资料好像都没有详细说明这个字段是用来干什么的,我也不好乱去猜测,有知道请留言哈!sql字段就是创建表或者索引的SQL语句。


对于索引而言,不同于于表的是:type等于‘index’,name是索引的名字,tbl_name是该索引所属的表的名字。对于自动创建的索引(用来实现PRIMARY KEY或 UNIQUE约束),sql字段为NULL。


sqlite_master表是只读的(这像视图),不能对它使用update,insert或delete。它会被create table、create index、drop table和drop index命令自动更新(这像触发器)。


临时表不会出现在sqlite_master中。临时表及其索引和触发器存放在另外一个叫sqlite_temp_master的表中。sqlite_temp_master和sqlite_master表结构一样,但它只是对

创建那些临时表的应用可见。如果要获取所有表的列表,不管是永久的还是临时的,可以使用类似下面的SQL命令:


SELECT name FROM
(SELECT * FROM sqlite_master UNION ALL
SELECT * FROM sqlite_temp_master)
WHERE type=’table’
ORDER BY name

举个例子:

test.db 数据库中有两张表,通过SQL:select * from  sqlite_master;我们可以看到sqlite_master中的内容和我们预期的一样,至于rootpage LZ真的不知道是什么意思额,table1和table2两张表是一样的表结构的,但是rootpage的值一个是2一个却是3.。。。


对 sqlite_master有了一定的了解后我们就可以解决标题中的问题(SQLite怎么统计一个数据库中有多少张表,视图或者触发器)了。 

下面是我总结的几条针对这个问题的SQL,可以根据自己的需求灵活去更改SQL以获取自己需要的结果。

查看表的总数SQL:
select count(
1) from sqlite_master where type in('table');

select count(
1) from sqlite_master where type = 'table';
查看视图的总数SQL:
select count(
1) from sqlite_master where type in('view');

select count(
1) from sqlite_master where type = 'view';
查看表以及视图的总数:
select count(
1) from sqlite_master where type in('table','view');


验证一下是否正确:


test.db中有两张表和一张视图,没有触发器,执行SQL:select count(1) from sqlite_master where type in('table','view','trigger');得到的结果是1+2+0=3,。单独去验证也都是正确的。

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将 SQLite3 数据库中提取的数据存储到另一个 SQLite3 数据库中,你可以使用以下步骤: 1. 导入 sqlite3 模块,输入该命令: ``` import sqlite3 ``` 2. 连接到源 SQLite3 数据库,输入该命令: ``` conn1 = sqlite3.connect('source_database_name.db') ``` 其中,source_database_name 是你要提取数据的源数据库名称。 3. 连接到目标 SQLite3 数据库,输入该命令: ``` conn2 = sqlite3.connect('target_database_name.db') ``` 其中,target_database_name 是你要存储数据的目标数据库名称。 4. 创建一个游标,输入该命令: ``` cursor1 = conn1.cursor() cursor2 = conn2.cursor() ``` 5. 执行 SQL 查询语句,输入该命令: ``` cursor1.execute("SELECT * FROM table_name") ``` 其中,table_name 是你要提取数据的名称。 6. 获取查询结果,输入该命令: ``` rows = cursor1.fetchall() ``` 7. 将查询结果插入到目标数据库中,输入该命令: ``` for row in rows: cursor2.execute("INSERT INTO table_name VALUES (?, ?, ...)", row) ``` 其中,table_name 是你要存储数据的名称,问号示要插入的数据值。 8. 提交事务并关闭游标和数据库连接,输入该命令: ``` conn2.commit() cursor1.close() cursor2.close() conn1.close() conn2.close() ``` 请注意,在存储数据时,你需要确保你有适当的权限来访问数据库。同时,你还需要熟悉 SQL 查询语句以及 SQLite3 数据库在 Python 中的基本操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值