使用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
相关产品推荐
相关产品推荐

