我正在用python开发一个应用程序。我正在将一些财务数据插入数据库。我有大约。1300 个表都具有相同的模式,每个公司一张表。
我正在使用 pypyodbc 1.3.3(最新)。
我有 Decimal 作为数据类型。我使用的精度为十进制(8,2)。在我的表中,数据类型是 DATE、DECIMAL、TINYINT 和 INT。我在我的 python 程序的一个表中插入以下行。
['05-JAN-2015', Decimal('30.90'), Decimal('31.40'), Decimal('30.40'), Decimal('30.85'), None, Decimal('0.00'), Decimal('0.00'), None, Decimal('0.00'), Decimal('0.00'), None, Decimal('0.00'), Decimal('0.00'), None, None, Decimal('30.88'), Decimal('0.00'), Decimal('0.00'), Decimal('0.00'), Decimal('0.00'), 32024, 321, Decimal('0.00'), Decimal('0.00'), None, Decimal('0.00'), None, Decimal('0.00')]
数据类型05-JAN-2015
为 DATE,所有None
数据类型均为 TINYINT,值32024, 321
的数据类型为 INT。但我仍然收到 SQL 异常
File "C:\Python27\lib\site-packages\pypyodbc.py", line 1470, in execute
self._BindParams(param_types)
File "C:\Python27\lib\site-packages\pypyodbc.py", line 1433, in _BindParams
check_success(self, ret)
File "C:\Python27\lib\site-packages\pypyodbc.py", line 986, in check_success
ctrl_err(SQL_HANDLE_STMT, ODBC_obj.stmt_h, ret, ODBC_obj.ansi)
File "C:\Python27\lib\site-packages\pypyodbc.py", line 964, in ctrl_err
raise Error(state,err_text)
Error: (u'HY104', u'[HY104] [Microsoft][SQL Server Native Client 10.0]Invalid precision or scale value')
当我尝试从 Management Studio 将相同的数据直接插入 SQL Server 时,它会成功插入。我已经交叉检查了变量的数据类型,一切都很完美。
当我在循环中将数据插入到 ~1300 个表中时,有点像
for i in range(tables_number):
insertion_data = calculate_values()
insert_into_db(insertion_data)
,这会导致问题吗?我也尝试过在循环中使用 0.1 秒的延迟。
有人知道吗?这是驱动程序中的错误吗?或者还有其他我想念的原因吗?
更新:
调试完代码,在脚本中发现pypyodbc.py
,函数SQLBindParameter(<many parameters>)
返回-1
的SQL_ERROR
参数Decimal('0.00') or Decimal(0.12) or Decimal(-0.12)
是小数形式的参数0.*