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>)
に返します-1
SQL_ERROR
Decimal('0.00') or Decimal(0.12) or Decimal(-0.12)
0.*