当前位置: 首页 > 图灵资讯 > 行业资讯> 如何在 Python 中正确查询并显示 SQLite 数据库中的所有表名

如何在 Python 中正确查询并显示 SQLite 数据库中的所有表名

来源:图灵python
时间: 2026-08-18 11:24:02

本文介绍了如何使用 python 的 sqlite3 模块执行 sql 查询、获取和打印 sqlite 数据库中所有用户表的名称都集中在解决因忽略查询结果而无输出的常见问题上。

本文介绍了如何使用 python 的 sqlite3 模块执行 sql 查询、获取和打印 sqlite 数据库中所有用户表的名称都集中在解决因忽略查询结果而无输出的常见问题上。

在 SQLite 中,系统表 sqlite_master 存储数据库中的元信息 type = 'table' 记录是用户创建的表格。虽然 SQL 语句 SELECT name FROM sqlite_master WHERE type='table'; 它本身是完全正确的,但只执行这个句子(cursor.execute())它不会自动输出结果——它只返回一个可迭代的 Cursor 对象,需要显式调用 fetchall()fetchone() 或者遍历获取数据。

以下是修正后的完整示例代码(兼容) Spyder 控制台及标准 Python 环境):

import sqlite3

sql_statement = """SELECT name FROM sqlite_master 
                   WHERE type = 'table' 
                   ORDER BY name;"""

try:
    with sqlite3.connect(r'C:\Users\myname\Desktop\sqlite-python\my.db') as conn:
        cursor = conn.cursor()
        cursor.execute(sql_statement)
        tables = cursor.fetchall()  # 获取所有匹配的表名元组列表,如 [('orders',), ('project',), ('tasks',)]

        if tables:
            print("下表包含在数据库中:")
            for table in tables:
                print(f"- {table[0]}")  # 每一个结果都是单元元素元组,取索引 0
        else:
            print("在数据库中没有用户表。")

except sqlite3.OperationalError as error:
    print("数据库访问失败:", error)
except sqlite3.Error as e:
    print("SQLite 错误:", e)

✅ 要点说明:

  • cursor.execute() 不返回数据,只执行查询;必须配合 fetchall() / fetchone() / fetchmany() 读取结果;
  • fetchall() 返回由元组成的列表(如 [('orders',), ('project',)]),需通过 table[0] 提取表名字符串;
  • conn.commit()SELECT 非必要且无效的查询(仅对) INSERT/UPDATE/DELETE 等待修改操作有意义),可安全移除;
  • 建议添加 ORDER BY name 使输出更容易读;
  • 使用原始字符串(r'')或避免双反斜杠 Windows 路径转换问题;
  • 建议捕获更通用的 sqlite3.Error,覆盖连接、语法、权限等异常。

⚠️ 注:默认查询不包括临时表(temp.sqlite_master 中表)。如需包含,请分别查询主数据库和 temp 数据库,或使用 PRAGMA table_list;(SQLite 3.35.0+ 支持)替代。

Python 3.14.2

Python 3.14.2是Python编程语言于2025年12月5日发布的稳定版本,属于3.14系列的第二次维护更新。该版本包含18个修复项目,重点解决多过程、数据和正则表达模块的回归问题,修复CVE-2025-12084等安全漏洞。这个版本标志着Python发展的一个重要里程碑,即自由线程模式(删除GIL)正式得到官方支持。

下载

立即学习“Python免费学习笔记(深入);

通过上述调整,您可以进行调整 Spyder 清晰可靠地列出控制台 .db 文件中的所有表名。