我正在尝试使用以下代码插入 CLOB。
cursor = connection.cursor()
cursor.setinputsizes(HERP = cx_Oracle.CLOB)
cursor.execute("INSERT INTO myTable (FOO, BAR) VALUES (:FOO, :BAR)", FOO=val1, BAR=val2)
cursor.execute("INSERT INTO myTable2 (HERP) VALUES (:HERP)", HERP=val3)
#len(HERP) 39097
当我运行脚本 WITHOUTcursor.setinputsizes(HERP = cx_Oracle.CLOB)
时,它在第二个查询 WITH 上失败ValueError: string data too large
,当我运行脚本时,cursor.setinputsizes(HERP = cx_Oracle.CLOB)
它在第一个查询时失败DatabaseError: ORA-01036: illegal variable name/number
。我试图插入的 CLOB 包含一个代码片段(即它有很多分号、逗号和括号),"string".decode("ascii")
返回u'string'
,所以 unicode 不是问题......对吗?我不知道这些事情是否有问题。数据库中的字段当前是 CLOB,但是我已经尝试使用 NCLOB 并且行为没有改变。
我也尝试将该字段作为 BLOB,然后.encode("hex")
在我插入的值上使用,同样的行为。
我也尝试过,HERP = cursor.var(cx_Oracle.CLOB)
而不是cursor.setinputsizes(HERP = cx_Oracle.CLOB)
相同的问题。
我一直在讨论cx-oracle-users列表,但还没有运气。
如果我使用这条线,它会起作用cursor.execute("INSERT INTO myTable2 (HERP) VALUES (:HERP)", HERP="".join(set(val3)).encode("hex"))
,所以我认为这不是数据内容的问题(这是与 BLOB 相关的)。
如何使用cx_Oracle
将 CLOB 插入 Oracle 数据库?