通过cx_Oracle插入类似用户定义的数据类型的值

时间:2015-04-02 09:31:52

标签: python oracle cx-oracle

拥有自己的Oracle数据类型

CREATE TYPE lids_geomtype AS OBJECT(
 type  NUMBER (6),
 source_type  NUMBER (4)
);

我可以通过cx_Oracle读取此数据类型。这是例子:

sql = 'SELECT geomtype FROM poly_gr where id = 4034'
cur.execute(sql)
data = cur.fetchall()
geom =  data[0][0]
print type(geom)
print geom.TYPE, geom.SOURCE_TYPE
print geom.type

************** Result is *****************
<type 'cx_Oracle.OBJECT'>
1002.0 6.0   
<cx_Oracle.ObjectType TARGET.LIDS_GEOMTYPE>

但是我通过cx_Oracle来解决INSERT问题。

sql = 'INSERT INTO poly (geomtype) VALUES (:1)'
cur.execute(sql,"TARGET.LIDS_GEOMTYPE(1002,6)")

上面的代码是错误的,因为数据类型不是VARCHAR2。你能告诉我怎样才能为插入创建cx_Oracle.ObjectType TARGET.LIDS_GEOMTYPE?

sql = 'INSERT INTO poly (geomtype) VALUES (%s)' %"TARGET.LIDS_GEOMTYPE(1002,6)"
cur.execute(sql)

如下所述的代码是可以的。但是我将在下一步使用executemany()并且有必要的变量。

1 个答案:

答案 0 :(得分:0)

更改您的表格,将 geomtype 的数据类型更改为您定义的对象

ALTER TABLE poly MODIFY geomtype lids_geomtype;