青柠学长 2022-08-20 22:51 采纳率: 83.3%
浏览 228
已结题

python 批量写入数据进sql server时,报错Error converting data type nvarchar to numeric.

问题如下:
我在使用python 批量插入csv文件数据进入sql server时遇到这个问题

(pymssql.OperationalError) 8114, b'Error converting data type nvarchar to  numeric.DB-Lib error message 20018, severity 16:\nGeneral SQL Server error: Check messages from the SQL Server\n

经过百度了解到是写入的数据类型和数据库的不匹配,但是我不知道该怎么处理这个问题。有老哥帮忙改改写一下麽?
python代码如下

import pymssql
import pandas as pd

class MSSQL():
    def __init__(self):
        super(MSSQL, self).__init__()
        self.connection = pymssql.connect(host='*******',
                                          user='*******',
                                          password='*******.',
                                          database='*******',
                                          charset='utf8',
                                          autocommit=True)

    def insert(self, sql_command):
        conn = self.connection
        cursor = conn.cursor()

        cursor.execute(sql_command)
        cursor.close()
        conn.close()


def int_business():
    # 读取csv,并写入数据库
    excel_sheet_0 = pd.read_csv(r'd:\werwer.csv')
    field = '日期,订单编号,下单时间,接单时长,店铺名称,店铺ID,店铺所在城市,订单支付类型,订单状态,订单配送状态,是否预订单,' \
            '订单总金额,订单折扣后金额,平台承担活动金额,商家承担活动金额,商品分类,商品名称,UPC码,商品SKU码,' \
            '商品销售数量,商品原价销售额,商品实付销售额,商品总补贴金额,商品商家补贴金额,商品平台补贴金额,是否部分退款商品,' \
            '部分退款商品数量,部分退款商品金额,订单小额付款,配送费,是否活动订单,优惠活动,是否催单,回复状态,商家回复内容,' \
            '配送时长,打包袋费,订单完成时间,[订单取消原因(仅取消订单)],归属账号'
    sheet_data_np = excel_sheet_0.values
    for i in range(0, sheet_data_np.shape[0] + 1, 1000):
        sheet_data = sheet_data_np[i:i + 1000, :]
        data_str = "'),('".join("','".join(str(j) for j in i.tolist()) for i in sheet_data)
        insert_value = f"('{data_str}')".replace("'nan'", "''")
        insert_sql = f'begin transaction;insert into meituan_storeorder ({field}) values {insert_value};commit transaction;'
        MSSQL().insert(insert_sql)


int_business()

  • 写回答

4条回答 默认 最新

  • 爱吃苦瓜的猿 2022-08-21 08:38
    关注

    应该是excel某些数值列的数据有一些非数值数据导致的。你这里只对全局进行了nan替换,
    建议你在拼接sql前对sheet_data的所有数值列进行一次数据清洗,将异常值填充为默认值。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 8月23日
  • 已采纳回答 8月23日
  • 创建了问题 8月20日

悬赏问题

  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改