使用cx_Oracle进行批量插入:数据类型不一致

时间:2016-05-24 14:37:36

标签: python oracle cx-oracle

我正在尝试使用Python和cx_Oracle将大量记录加载到Oracle数据库中。共识似乎是您应该针对行列表(this帖子)准备一个游标和executemany。所以我的代码看起来像:

stmt = "INSERT INTO table (address, shape) VALUES (:1, :2)"
cursor.prepare(stmt)
rows = []
# Make huge list of rows
cursor.executemany(None, rows)

我传递的值看起来像这样:

['1234 MARKET ST', "SDE.ST_Geometry('POINT (0 0)', 2272)"]

问题是SDE.ST_Geometry()数据库函数被视为文字字符串而不是被评估,因此我得到cx_Oracle.DatabaseError: ORA-00932: inconsistent datatypes: expected SDE.ST_GEOMETRY got CHAR

是否无法将数据库函数传递给具有cx_Oracle的准备好的游标?

2 个答案:

答案 0 :(得分:1)

简单的回答是,由于您传递的是字符串,因此将其视为字符串。绑定值仅作为数据处理。

但是看看尚未发布的cx_Oracle主线https://bitbucket.org/anthony_tuininga/cx_oracle?它有新的对象支持。

查看此提交"添加了创建SDO_GEOMETRY的示例。": https://bitbucket.org/anthony_tuininga/cx_oracle/commits/2672c799d987a8901ac1c4917e87ae4101a1d605

答案 1 :(得分:0)

最后,我通过在预准备语句中嵌入函数调用来解决这个问题:

stmt = "INSERT INTO table (address, shape) VALUES (:1, ST_Geometry(:2, 2272))"

向PatrickMarchand提示提示。