2015-04-02 145 views
-1

用戶定義的數據類型插入值有自己的Oracle數據類型喜歡通過cx_Oracle

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

我可以讀取該數據類型的cx_Oracle。這是expample:

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(),並且有必要的變量。

+0

你試過實例'cx_Oracle.OBJECT'? – filmor 2015-04-02 09:39:13

+0

我不知道如何從準備數據創建'cx_Oracle.OBJECT'。這是我的問題。 – filippoo 2015-04-02 10:52:17

回答

0

改變你的表,geomtype的變化數據類型到您定義的對象

ALTER TABLE poly MODIFY geomtype lids_geomtype; 
+0

這不是問題。 Column geomtype已經設置了lids_geomtype數據類型。問題是由cx_Oracle模塊解釋。我不知道如何將解釋更改爲'cx_Oracle.ObjectType TARGET.LIDS_GEOMTYPE' – filippoo 2015-04-02 13:01:45