You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用psycopg2按int8格式特定ID批量保存文件?

问题分析与解决方案

你的代码存在几个关键问题,直接导致无法正常运行,以下是修正方案:

核心问题点

  • DataFrame迭代方式错误:直接用log_id[0]无法正确遍历列数据,需明确指定列名或用位置索引定位
  • 查询结果未正确转换:cur.execute()返回的是游标对象,不是DataFrame,不能直接调用to_excel()
  • 文件名拼接类型不兼容:item是int8类型,直接和字符串拼接会触发类型错误
  • 数据库占位符错误:多数数据库不支持??作为参数占位符,需根据数据库类型调整(比如SQLite用?,MySQL/PostgreSQL用%s)

修正后的代码(推荐用pandas直接查询)

import pandas as pd

# 假设log_id是包含file_id列的DataFrame
for item in log_id['file_id']:  # 或用log_id.iloc[:, 0]定位第一列
    # 根据你的数据库类型调整占位符,比如MySQL替换为%s
    query = 'SELECT * FROM "entries" WHERE "entries"."file_id" = ?;'
    # 用pd.read_sql直接获取查询结果为DataFrame
    result_df = pd.read_sql(query, con=你的数据库连接对象, params=[item])
    # 将int8类型的item转为字符串后拼接文件名
    writer = pd.ExcelWriter(f'log{str(item)}.xlsx', engine='xlsxwriter')
    result_df.to_excel(writer, index=False)
    writer.close()  # 新版本xlsxwriter推荐用close替代save

若坚持使用游标方式的修正版

for item in log_id['file_id']:
    query = 'SELECT * FROM "entries" WHERE "entries"."file_id" = ?;'
    cur.execute(query, [item])
    # 从游标中提取列名和数据,转换为DataFrame
    column_names = [col[0] for col in cur.description]
    result_df = pd.DataFrame(cur.fetchall(), columns=column_names)
    # 处理文件名拼接
    writer = pd.ExcelWriter(f'log{str(item)}.xlsx', engine='xlsxwriter')
    result_df.to_excel(writer, index=False)
    writer.close()

内容的提问来源于stack exchange,提问作者Sara

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 09:15:48