OverflowError:Python int太大而无法转换为C long - executemany sql insert

时间:2017-05-18 18:45:17

标签: python sql-server pandas odbc

我尝试使用ceODBC将pandas数据帧/表插入到SQL Server数据库中。 我首先从数据帧创建一个元组列表,然后使用executemany()方法,该方法对列表中的每个元组执行INSERT命令。

data = [ tuple(x) for x in table.values ]
cursor.executemany( SQLCommand, data )

Sql命令看起来像这样但有更多变量 -

 "INSERT INTO table VALUES (?, ?, ?)"

我收到了Python OverflowError。 数据帧中的值大于2 ^ 31-1,C long类型可以存储的最大正整数。

>>> junecps.max().max() > 2**31-1
True

但是我使用64位python 3.4的64位机器,所以我很困惑为什么我会触发这个错误。我的数据框中没有任何值高于此sys.maxsize。

>>> sys.maxsize
9223372036854775807
>>> junecps.max().max() > 2**63-1
False

这是追溯。

Writing SQL 'Insert' Command
INSERTing 1494250 rows
Traceback (most recent call last):
  File "-----", line 93, in <module>
    pysql.uploadTable( connection, junecps, 'CPSProcessedJune' )
  File "-----", line 131, in uploadTable
    cursor.executemany( SQLCommand, data )
OverflowError: Python int too large to convert to C long

0 个答案:

没有答案