如何在SMALLINT上使用teradatasql在数据库中插入空值,在计算过程中发生数字溢出

时间:2019-12-04 20:46:55

标签: python python-3.x dataframe teradata teradata-sql-assistant

因此,我使用None对象在pandas数据框中定义了空值。 这是数据框中具有NaNNone

的行的示例
27     XXX         None        41.0          NaN           1.0        50.0          NaN           1.0        71.0          3.0  0.9826382611          162.0             3.0  0.9952958893        MTD

当我在数据帧中插入None时,它变成NaN,然后插入到 Teradata 中的一个小整数字段中时,出现插入错误。如何告诉teradata使用python将那些NaN插入到teradata中的空值?

  

计算过程中发生数字溢出。

在下面的示例中,参数8为NaN

Insert Exception in function insertDtframe, activated rollback: [Version 16.20.0.54] [Session 2258656] [Teradata SQL Driver] [Error 502] Batch row 3 bound parameter 8 type VARCHAR (448) differs from batch row 1 type FLOAT (480)
 at gosqldriver/teradatasql.(*teradataConnection).makeDriverErrorCode TeradataConnection.go:1074
 at gosqldriver/teradatasql.(*TeradataRows).validateBatchValues TeradataRows.go:947
 at gosqldriver/teradatasql.newTeradataRows TeradataRows.go:361
 at gosqldriver/teradatasql.(*teradataStatement).QueryContext TeradataStatement.go:122
 at gosqldriver/teradatasql.(*teradataConnection).QueryContext TeradataConnection.go:2036
 at database/sql.ctxDriverQuery ctxutil.go:48
 at database/sql.(*DB).queryDC.func1 sql.go:1464
 at database/sql.withLock sql.go:3032
 at database/sql.(*DB).queryDC sql.go:1459
 at database/sql.(*Conn).QueryContext sql.go:1701
 at main.goCreateRows goside.go:599
 at main._cgoexpwrap_e6e101e164fa_goCreateRows _cgo_gotypes.go:331
 at runtime.call64 asm_amd64.s:574
 at runtime.cgocallbackg1 cgocall.go:316
 at runtime.cgocallbackg cgocall.go:194
 at runtime.cgocallback_gofunc asm_amd64.s:826
 at runtime.goexit asm_amd64.s:2361
Completed Time: 2019-12-04 15:41:06.967610

1 个答案:

答案 0 :(得分:0)

按照弗雷德的建议,使用函数pandas.notnullNaN替换为None

最初,当您向 pandas 插入None对象时,它将替换为NaN。如果要插入数据库,则需要将这些NaN转换为None。这是因为数据库会认为您正在插入字符串,尤其是在整数数据类型字段上。以下是将NaN转换为任何特定值的代码。在我的情况下,应为None

cNoneDtframe = parsedDtframe.where((pandas.notnull(parsedDtframe)), None)