情况是我正在通过API将一个表拉到python数据框架中。这个数据框被直接拉入SQL服务器。我遇到了一个问题,我遇到了一个空字符串或空单元格,期望是数据类型float。即使我在SSMS中预构建了一个表,没有一个浮点型列,我仍然得到这个错误。
我将相同的数据拉入CSV以进行故障排除,我们可以看到第78行数据在第9列中有一个空单元格。我的python代码成功地将77行推入SQL,然后失败。如果我只是给列指定nvarchar类型,那么当出现空字符串时,它应该不会报错。
谁能告诉我为什么我得到一个错误与第12个参数(当我只有9列)和它的愿望是一个浮点数,当它应该满足于成为一个字符串?
这是一张图片,显示所有的部分都在一起,但不是完全在一起。发生了很多事
下面是可能适用或有帮助的代码。我已经注释掉了所有用于故障排除的其他专栏,没有将它们复制到这里。
for i in range(0, 5):
now = datetime.now()
print ('loading stage', i+1, 'of', number_of_locations, 'location:', all_unique_locations[i], ' current time:' , now.strftime ("%H:%M:%S"))
current_stage = stageSummary.get_stage_summary_by_location_text(access_token, all_unique_locations[i], False )
df = convert_string_to_dataframe(current_stage)
all_stage_summary_df = all_stage_summary_df.append(df)
connStr = pyodbc.connect('DRIVER={SQL Server Native Client 11.0};SERVER=<redacted>;DATABASE=AAV_DEVELOPMENT;Trusted_Connection=yes')
cursor = connStr.cursor()
for index,row in all_stage_summary_df.iterrows():
print("Adding row ");
cursor.execute("INSERT INTO dbo.StageSummaries([Primary_Location]
,[JobNo]
,[Stage]
,[Top_Depth_m]
,[Elapsed_Time_hh_mm_ss]
,[Start_Time]
,[End_Time]
,[Pumping_Time_hh_mm_ss]
,[Mainline_Pressure_Min_MPa]
)values (?,?,?,?,?,?,?,?,?)"
,row['Primary Location']
,row['JobNo']
,row['Stage #']
,row['Top Depth (m)']
,row['Elapsed Time (hh:mm:ss)']
,row['Start Time']
,row['End Time']
,row['Pumping Time (hh:mm:ss)']
,row['Mainline Pressure Min (MPa)']
)
connStr.commit()
cursor.close()
connStr.close()
我看到几个问题有同样的错误,但他们没有很多细节或解决方案,我已经找到。
误差
('42000', '[42000] [Microsoft][SQL Server Native Client 11.0][SQL Server]The incoming tabular data stream (TDS) remote procedure call (RPC) protocol stream is incorrect. Parameter 12 (""): The supplied value is not a valid instance of data type float. Check the source data for invalid values. An example of an invalid value is data of numeric type with scale greater than precision. (8023) (SQLExecDirectW)')
看看下面的链接:"插入"参数7 ("):提供的值不是数据类型float的有效实例。">
您可以尝试将数据框中的空字段替换为0。