You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python+sqlite3查询自建数据库中所有表名的问题

解决SQLite3无法读取数据库所有表名的问题

嘿,我懂你遇到的麻烦了——用Python的sqlite3模块建了数据库,结果想把里面所有表名读出来却搞不定是吧?别慌,这事儿其实有现成的解决办法,我给你捋清楚两种靠谱的方式:

方法一:查询SQLite系统表sqlite_master

SQLite会把所有数据库对象(包括你创建的表、视图)的元数据都存在sqlite_master这个系统表里,直接查它就能拿到所有表名:

import sqlite3

# 先连接到你的数据库
con = sqlite3.connect(folderdir + dbFileName)
c = con.cursor()

# 查询所有用户自建的表(自动排除系统表)
c.execute("SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%';")
# 获取所有结果
table_records = c.fetchall()

# 把结果从元组列表转成纯表名字符串列表
table_names = [record[0] for record in table_records]
print("数据库里的所有表名:", table_names)

# 用完记得关闭连接
con.close()

这里的name NOT LIKE 'sqlite_%'是为了排除SQLite自带的系统表(比如sqlite_sequence),如果你想连系统表一起查,去掉这个条件就行。

方法二:用PRAGMA table_list(适合新版本SQLite)

如果你用的是SQLite 3.37.0及以上的版本,可以用PRAGMA table_list命令,它返回的信息更详细,还能区分普通表、临时表:

import sqlite3

con = sqlite3.connect(folderdir + dbFileName)
c = con.cursor()

# 执行PRAGMA命令
c.execute("PRAGMA table_list;")
table_records = c.fetchall()

# 结果里的第二个元素就是表名
table_names = [record[1] for record in table_records]
print("数据库里的所有表名:", table_names)

con.close()

小提醒

还有个容易踩的坑:确认你连接的是正确的数据库文件!有时候路径写错,连到了一个空的新数据库,自然查不到表名。另外,CREATE TABLE语句默认是自动提交的,一般不用额外commit(),但如果你的代码里有其他未提交的事务,也可以试试加一句con.commit()再查。

内容的提问来源于stack exchange,提问作者jxw

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:20:24