当尝试从pandas数据框架写入MS sql server时,我一直得到下面相同的错误。我已经三次检查了所有的数据是否与表上的数据类型匹配。
样本数据:
<表类>POSTING_DATE 源 READTYPE PPTAGID ETAGID_PLATE EQUIPID 机构 ENTRY_PLAZA ENTRY_DATE EXIT_PLAZA EXIT_DATE TOLL_CLASS 英里 TOLL_AMOUNT ID tbody><<tr>2022-06-06就是 精英 转发器 777777777 11111111111 5363 KTA 东部入口 2022-06-04 17:52:39 南部入口 2022-06-04 21:50:25 5 0.00 31.95 111111111111111111111 2022-06-06就是 EZPass 转发器 777777777 11111111111 5363 DelDOT 南 南 D95 2022-06-03 03:08:21 5 0.00 9.00 111111111111111111111 2022-06-06就是 EZPass 转发器 777777777 11111111111 5363 NJTP 1 2022-06-03 03:27:38 2 2022-06-03 03:39:56 5 0.00 4.60 111111111111111111111 2022-06-06就是 精英 转发器 777777777 11111111111 5362 KTA 威奇托:i - 135 i - 235 47圣道明> 2022-06-04 15:21:21 南部入口 2022-06-04 15:47:57 5 0.00 5.05 111111111111111111111 2022-06-06就是 精英 转发器 777777777 11111111111 5357 OTA WR-BGCBN 2022-06-05 02:05:25 WR-STLINE 2022-06-05 02:38:17 5 0.00 9.20 111111111111111111111 2022-06-06就是 精英 转发器 777777777 11111111111 5355 OTA HEB-NWCLML 2022-06-03 07:10:36 HEB-NWCLML 2022-06-03 07:10:36 5 0.00 3.95 111111111111111111111 表类>
需要单独指定每个列,如row[1]
,row[2]
…row[15]
,nora loop
,直接使用executemany
(对于DML操作,它也比execute
性能更高),例如
import pyodbc
import pandas as pd
con = pyodbc.connect(
"DRIVER=ODBC Driver xx for SQL Server;"
"SERVER=<IP>,<some number>;"
"DATABASE=DB123;"
"Trusted_Connection=yes;"
)
data = pd.read_csv(pathToFile,delimiter= ';') # is just a sample delimiter representation, you should replace with yours
df = data.values.tolist()
MsExe=con.cursor()
try:
MsExe.fast_executemany = True
MsExe.executemany("""
INSERT INTO test_tolls_table_temp (PostingDate, Source, ReadType, PPTagID, ETagID_Plate, EquipID, Agency, Entry_Plaza, Entry_Date, Exit_Plaza, Exit_Date, Toll_Class, Miles, Toll_Amount, ID)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
""",df)
except Exception as exception:
print(exception)
MsExe.close()
con.commit()
con.close();