我正在尝试使用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
的准备好的游标?
答案 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提示提示。