首页 > 解决方案 > ODBC Driver 17 for SQL Server]Windows 上的数值超出范围

问题描述

我正在使用 pyodbc 将数据从 csv 文件推送到我的数据库中。csv 文件具有以下结构(仅显示 2 行)

      df

     vendor   FGW     prn             part      stp     stly    fact     fgy          comments
     GDAFAF  202132   TL 8+9 HHA     jkaj-98    0.12    0.999   Bhy iu   1918199  
     MAMAW   202132   TL 8+9 HHA     uysus-09   0.88    0.972   vgty22   451617

所以我打算使用 pyodbc 执行一个 sql 语句来插入我的数据库。

    table = "Schema.Table_XXX"
      #### Connect via pyodbc 
    my_conn = pyodbc.connect("DSN=MYDB;UID=jjjjjj;PWD=yyyyyy", autocommit=False)
       ### MYDB is created on Windows for ODBC Driver 17 for SQL Server
    my_cursor = my_conn.cursor()
    my_cursor.fast_executemany = True
    select_statement = "SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = '{0}' 
      AND TABLE_NAME = '{1}';".format(table.split('.')[0], table.split('.')[1])
      row_list = my_cursor.execute(select_statement)
      column_list = list()
      for x in row_list:
         column_list.append("[{}]".format(x[3]))  # Add all column_names in table a list
      schema_string = '(' + ', '.join(column_list) + ')'
      values_string = '(?'
      for _ in range(len(column_list) - 1):
         values_string += ', ?'
          values_string += ')'
      insert_statement = "INSERT INTO " + table + " " + schema_string + " VALUES " + values_string + ";"

      insert_params = list(df.itertuples(index=False, name='Pandas'))

      my_cursor.fast_executemany = True
  try:
      my_cursor.executemany(insert_statement, insert_params)
      my_conn.commit()  
        except pyodbc.Error as error:
         print(error)
      my_conn.rollback()  

但是,当我运行此代码时,出现错误

('22003', '[22003] [Microsoft][ODBC Driver 17 for SQL Server]数值超出范围 (0) (SQLExecute)')

我之前创建的数据库表就是基于这个

   CREATE TABLE [Schema].[Table_XXX](
        [vendor] [varchar](255) NULL,
        [FGW] INT NULL,
        [prn] [varchar](255) NULL,
        [part] [varchar](255) PRIMARY KEY,
        [stp] [float] NULL, 
        [stly] [float] NULL,
        [fact] [varchar](255) NULL,
        [fgy] INT NULL,
        [comments] [varchar](255) NULL
        ) ON [PRIMARY]

不明白如何解决这个问题。任何帮助将不胜感激。

标签: sql-serverpandaspyodbcnumeric

解决方案


推荐阅读