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

Python读取SQL主键自动格式化日期格式问题求助

解决Python自动格式化主键的问题

问题根源

pandas执行pd.read_sql时会自动推断列数据类型,当主键字符串中包含类似-MM-DD的片段(如ABCAASASJDK2322-12-01),会被误判为日期类型,后续输出时自动转换为带月份缩写的格式(如ABCAASASJDK2322-Dec-01),导致匹配失败。

解决方案

1. 读取SQL时强制指定主键列为字符串类型

在调用pd.read_sql时,通过dtype参数明确指定PK列的数据类型为字符串,从根源避免自动类型转换:

# connection1读取时指定dtype
df1 = pd.read_sql(query, connection, dtype={'PK': str})
df1.to_excel('File1.xls')

# connection2读取时同样指定
df2 = pd.read_sql(query, connection, dtype={'PK': str})
df2.to_excel('File2.xls')

2. 已读取数据的类型修正(可选)

如果已经完成数据读取,可将PK列强制转换为字符串类型:

df1['PK'] = df1['PK'].astype(str)
df2['PK'] = df2['PK'].astype(str)

3. 写入Excel时强制文本格式

使用openpyxl写入主键时,设置单元格的数字格式为文本,防止Excel再次自动格式化:

for x in range(4, uniquerecrange):
    df1index = worksheet.cell(x,1)
    df1index = int(df1index.value)
    df1indexval = df1["PK"].iloc[df1index]
    print(df1indexval)
    # 设置单元格为文本格式再赋值
    cell = worksheet.cell(row=x, col=newcolindex)
    cell.number_format = '@'
    cell.value = df1indexval

关键说明

  • 优先使用读取时指定dtype的方式,处理数百万条记录时效率更高,避免后续转换的额外开销。
  • 写入Excel时设置文本格式,可确保最终Excel文件中的主键保持原始字符串格式,不会被Excel自动识别为日期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 14:23:14