我正在尝试使用cursor fast_ExecuteMy将几个大型csv文件上载到sql server数据库中。下面是代码示例
if item.endswith(zip_ext):
file_name = os.path.abspath(item)
zip_ref = zipfile.ZipFile(file_name)
zip_ref.extractall(directory)
zip_ref.close()
os.remove(file_name)
for item in os.listdir(directory): # Load and Edit CSV
if item.endswith(ext):
df = pd.read_csv(item)
df.rename(columns={df.columns[0]:'InvoiceNo',df.columns[2]:'OrderNo',df.columns[20]:'Syscode',
df.columns[27]:'SpotDate',df.columns[28]:'Network',df.columns[30]:'SpotTime',
df.columns[29]:'SpotLength',df.columns[31]:'Program',df.columns[32]:'SpotName',
df.columns[21]:'Source'},inplace=True)
df['BillDate']='2021-03-01' # Enter Preferred Bill Date Here!
df['FileName']=str(item)
df[['SpotDate','BillDate','SpotTime']]=df[['SpotDate','BillDate','SpotTime']].apply(pd.to_datetime)
df['SpotTime']=df['SpotTime'].dt.time
df['OrderNo']=df['OrderNo'].apply(lambda x: '' if x == 'NULL' else x)
df = df[['InvoiceNo', 'OrderNo', 'BillDate', 'Syscode', 'SpotDate', 'Network', 'SpotTime', 'SpotLength',
'Program', 'SpotName', 'Source', 'FileName']]
# Connect to SQL Server
conn = pyodbc.connect('DRIVER=SQL Server Native Client 11.0;'
'SERVER=PWDBS006SQL;' #UPDATED 2/4/21
'DATABASE=Marketing Cross-Channel Affidavits;'
'Trusted_Connection=yes;',
autocommit=True)
crsr = conn.cursor()
crsr.fast_executemany = False
# Insert Df to SQL
sql_statement = '''INSERT INTO dbo.SpectrumReach_Marketing (InvoiceNo, OrderNo, BillDate, Syscode, SpotDate,
Network, SpotTime, SpotLength, Program, SpotName, Source, FileName)
VALUES (?,?,?,?,?,?,?,?,?,?,?,?)'''
list_of_tuples = list(df.itertuples(index=False))
crsr.executemany(sql_statement, list_of_tuples)
crsr.close()
conn.close()
运行此代码时,我收到错误消息:('HY000','HY000][Microsoft][SQL Server本机客户端11.0]Unicode转换失败(0)(SQLExecute)')
我已经将这段代码用于来自几个来源的几个大型数据集,这些数据集的格式应该完全相同,并且它已经工作了,但是对于特定的供应商,它中断并显示了上述错误。此外,当我的fast_executemany=False时,此代码会运行,但由于我尝试传输的文件的大小,因此不可能将数据上传得那么慢
任何帮助都将不胜感激
目前没有回答
相关问题 更多 >
编程相关推荐