在Spyder中使用Python结合SQL语句无法列出SQLite数据库表名的问题求助
在Spyder中使用Python结合SQL语句无法列出SQLite数据库表名的问题求助
我太懂这种挠头的感觉了——在sqlite3命令行里敲个.tables就能清清楚楚看到所有表名,但自己写的Python代码却啥输出都没有,属实让人摸不着头脑。咱们来拆解下你的代码问题,分分钟给你修好它:
你的代码里的几个小疏漏
- 没把查询结果取出来打印:你让数据库执行了查询语句,但完全没写代码去获取这些表名结果,更别说打印到控制台了
- 多余的
conn.commit():commit()是用来提交插入、更新、建表这类写入操作的,查询操作根本不需要这一步,删掉它就行
修正后的完整代码
import sqlite3 sql_statement = """SELECT name FROM sqlite_master WHERE type='table';""" try: with sqlite3.connect('C:/Users/myname/Desktop/sqlite-python/my.db') as conn: cursor = conn.cursor() cursor.execute(sql_statement) # 把查询到的所有表名结果取出来,返回的是包含元组的列表 tables = cursor.fetchall() # 遍历结果打印表名 if tables: print("数据库中的表名:") for table in tables: print(table[0]) # 元组的第一个元素就是我们要的表名 else: print("数据库中未找到任何表,或者数据库路径有误") except sqlite3.OperationalError as error: print("操作失败:", error)
改动的关键点说明
- 用
cursor.fetchall()获取结果集:这个方法会把数据库返回的所有表名以列表形式拿回来,每个元素是一个只存了表名的元组(比如('orders',)) - 遍历打印表名:通过循环把每个元组里的表名提取出来打印,和
.tables的输出效果一致 - 增加空结果判断:如果数据库里真的没表,或者你写的数据库路径错了,会给出明确提示,不会让你对着空白控制台发呆
- 移除
conn.commit():查询操作不需要提交,去掉它避免做无用功
现在你再在Spyder里运行这段代码,应该就能看到和命令行里一样的表名列表啦!
备注:内容来源于stack exchange,提问作者tkj80
相关产品推荐
相关产品推荐

