Python如何读取SQLite生成的.db文件?代码提示数据为空如何解决
问题核心错误点
- 查询表的SQL语法错误:
sqlite_master系统表的type字段标识数据库对象类型,表对应的固定值是'table',你代码里写的'Sheet1'是表名不是对象类型,必然查询不到结果 - 变量名拼写错误:你定义的列表变量是
table_list,打印时写的是tablelist,缺少下划线会直接报变量不存在错误 - 未执行查询就尝试读取游标结果:第二段代码写完Excel导入后,没有主动执行
SELECT查询语句,游标c没有关联任何结果集,自然读不到数据 - 数据库后缀不匹配:你提到已存储为
.db格式,但代码里连接的是.sqlite后缀的数据库,首先要确认你要读取的数据库文件路径、文件名完全正确
正确实现代码
场景1:还未完成Excel导入到SQLite,需要先导入再读取
import pandas as pd import sqlite3 # 1. 配置参数 excel_path = 'filename.xlsx' # 替换为你的Excel文件实际路径 db_path = 'xyzDB.db' # 替换为你要生成的.db文件路径,和你自己的文件名匹配 table_name = 'Sheet1' # 要存入SQLite的表名,可自定义 # 2. 建立数据库连接 conn = sqlite3.connect(db_path) # 3. 分块导入Excel到SQLite chunksize = 10000 for chunk in pd.read_excel(excel_path, chunksize=chunksize): # 替换列名里的空格为下划线,避免SQL语法问题 chunk.columns = chunk.columns.str.replace(' ', '_') # if_exists参数:replace是覆盖原表,append是追加,fail是存在就报错 chunk.to_sql(name=table_name, con=conn, if_exists='append', index=False) # 4. 读取SQLite表内容 # 先执行查询语句 cursor = conn.cursor() cursor.execute(f"SELECT * FROM {table_name}") # 读取列名 col_names = [desc[0] for desc in cursor.description] print('表列名:', col_names) # 读取全部行数据 all_rows = cursor.fetchall() print('表数据行数:', len(all_rows)) # 打印前10行验证 for row in all_rows[:10]: print(row) # 关闭连接 conn.close()
场景2:已经有生成好的.db文件,直接读取即可
import pandas as pd import sqlite3 # 1. 配置参数 db_path = 'xyzDB.db' # 替换为你现有的.db文件实际路径 table_name = 'Sheet1' # 替换为你之前导入时设置的表名,不确定的话先查所有表 # 2. 建立连接 conn = sqlite3.connect(db_path) cursor = conn.cursor() # 可选:如果不确定表名,先查询当前库所有表 cursor.execute("SELECT name FROM sqlite_master WHERE type='table'") all_tables = [t[0] for t in cursor.fetchall()] print('当前库所有表名:', all_tables) # 3. 读取指定表数据 # 方法1:用pandas直接读,更方便 df = pd.read_sql(f"SELECT * FROM {table_name}", con=conn) print(df.head()) # 打印前5行验证 # 方法2:用游标读 cursor.execute(f"SELECT * FROM {table_name}") col_names = [desc[0] for desc in cursor.description] rows = cursor.fetchall() print(col_names) print(rows[:10]) # 关闭连接 conn.close()
内容的提问来源于stack exchange,提问作者Inara
相关产品推荐
相关产品推荐

