python cx_oracle clob对象_使用cx_Oracle插入CLOB

我正在尝试使用以下代码插入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

当我在不使用cursor.setinputsizes(HERP = cx_Oracle.CLOB)的情况下运行脚本时,它在第二次使用ValueError:字符串数据查询时失败,当我在使用cursor.setinputsizes(HERP = cx_Oracle.CLOB)的脚本中运行时,它失败了使用DatabaseError的第一个查询:ORA-01036:非法的变量名称/编号.我要插入的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数据库?

解决方法:

有几种可能的解决方案:

>升级cx_Oracle.我不确定您使用的是哪个版本,但是我正在将python 2.7.2与cx_Oracle 5.1一起使用,并且在不使用setinputsizes的情况下将15万个字符插入到CLOB列中时不会出现任何错误.

>因为setinputsizes适用于每个后续游标使用,所以只需在这些不同的cursor.execute语句之间进行更改.

例如:

cursor = connection.cursor()

cursor.setinputsizes(FOO=None, BAR=None)

cursor.execute("INSERT INTO myTable (FOO, BAR) VALUES (:FOO, :BAR)",

FOO=val1, BAR=val2)

cursor.setinputsizes(HERP = cx_Oracle.CLOB)

cursor.execute("INSERT INTO myTable2 (HERP) VALUES (:HERP)", HERP=val3)

标签:oracle,cx-oracle,python

来源: https://codeday.me/bug/20191031/1976964.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值