2

Pythonでアプリケーションを開発しています。財務データをデータベースに挿入しています。私は約持っています。すべて同じスキーマを持つ 1300 のテーブル (会社ごとに 1 つのテーブル)。

私はpypyodbc 1.3.3(最新)を使用しています。

私はデータ型として Decimal を持っています。Decimal(8,2) の精度を使用しています。私のテーブルでは、データ型は DATE、DECIMAL、TINYINT、および INT です。Python プログラムのテーブルの 1 つに次の行を挿入しています。

['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')

同じデータを管理スタジオから SQL サーバーに直接挿入しようとすると、正常に挿入されます。変数のデータ型をクロスチェックしましたが、すべて完璧です。

ループで〜1300個のテーブルにデータを挿入しているので、

for i in range(tables_number):
    insertion_data = calculate_values()
    insert_into_db(insertion_data)

、それが問題の原因ですか?また、ループで 0.1 秒の遅延を使用してみました。

誰かに何か考えがありますか?これはドライバーのバグですか?または、私が見逃している他の原因はありますか?

アップデート:

コードをデバッグした後、スクリプトpypyodbc.pyで見つけた関数は、パラメーターがフォームの 10 進数を意味する場合SQLBindParameter(<many parameters>)に返します-1SQL_ERRORDecimal('0.00') or Decimal(0.12) or Decimal(-0.12)0.*

4

1 に答える 1