gpt4 book ai didi

python - "Insert Into"语句由于"Parameter 7 ("而导致错误"): The supplied value is not a valid instance of data type float."

转载 作者:行者123 更新时间:2023-12-03 15:36:14 25 4
gpt4 key购买 nike

我正在一次使用Python将一批CSV文件加载到SQL Server表中。每个文件都包含许多自由文本字段和错误数据,在尝试插入之前,我会对其修剪和重命名。

通常(大约95%的时间),该代码似乎可以正常工作,但是出现以下错误消息时会出现异常。

我很困惑,因为a)我的表中只有四列,并且不明白为什么要查找参数7,b)文本列被加载到nvarchar(max)格式的列中,所以我不会不会出现数据类型错误。

我检查了源文件,看看哪些行引发了错误,问题行与成功加载的其他行之间似乎没有明显的区别。

我已将过程调整为仅插入JobID(作为bigint),并且工作正常,但没有任何问题,但是一旦我输入了文本字段,就会导致错误。

我正在使用Python 3.7.0并加载到SQL Server 14.0中

import numpy as np
import pyodbc
import os
import glob
import pandas as pd
import csv
import config
import urllib
import shutil
import codecs

path = "C:\\myFilePath"

allFiles = glob.glob(os.path.join(path, "*.csv"))

for file_ in allFiles:
df = pd.concat((pd.read_csv(f, encoding='utf8') for f in allFiles))

cnxn = pyodbc.connect("Driver={ODBC Driver 13 for SQL Server};"
"Server=myServer;"
"Database=myDatabase;"
"Trusted_Connection=yes;"
"SelectMethod=cursor;"
)

df2 = df[['JobID', 'NPS_score', 'Obtuse_Column_Name_1', 'Obtuse_Column_Name_2']].copy()

df2.columns = ['JobID', 'Score','Q1', 'Q2']

cursor = cnxn.cursor()
for index,row in df2.iterrows():
try:
counter = counter + 1
cursor.execute("""insert into [myDB].[dbo].[input_test]( [JobID], [Score], [Q1], [Q2]) VALUES (?, ?, ?, ?)""", row['JobID'],row['Score'],row['Q1'], row['Q2'])
cursor.commit()
print(counter)
except Exception as e:
print(e)
continue
cursor.close()
cnxn.close()

我希望数据会被加载,但是在某些行上会显示以下错误代码:

('42000', '[42000] [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]The incoming tabular data stream (TDS) remote procedure call (RPC) protocol stream is incorrect. Parameter 7 (""): 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)')

最佳答案

将数据转储到SQL表时遇到了类似的错误

我将数据导出到.csv文件,发现两列中有和inf 值。

所以,我用 nan 替换了 inf 值,并且它起作用了:)

df2.replace([np.inf, -np.inf], np.nan, inplace = True)
df2 = df2.fillna(0)

PS:这个答案可能也对其他人有帮助。

关于python - "Insert Into"语句由于"Parameter 7 ("而导致错误"): The supplied value is not a valid instance of data type float.",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53986727/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com