本文介绍了如何使用 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 文件中的所有表名。