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
相关产品推荐
相关产品推荐

