使用大字符串更新oracle CLOB列

时间:2016-05-30 09:54:13

标签: python oracle pyodbc clob lob

我有一个包含几列的表systesttab。其中一列是CLOB类型,它应该包含一个base64编码图像的字符串。

CREATE TABLE systesttab(
    ...
    f_picture     CLOB       DEFAULT ' ' NOT NULL,
    ...
)

但是,当我尝试使用大的base64字符串(超过100k字符)更新表时,它会失败并且我的python应用程序崩溃(即使在尝试...除了块之外)。

UPDATE systesttab SET f_picture = 'data:image/png;base64,iVBORw0KGgoASU ...'

我甚至试图将值转换为clob:

UPDATE systesttab SET f_picture = TO_CLOB('data:image/png;base64,iVBORw0KGgoASU ...')

但我得到的只是这个错误:

Input string too long, limit 8192

现在,我想这是试图告诉我一些关于块大小的信息,但它对我来说并没有什么帮助。

enter image description here

如何使用单个语句更新表?

我是否必须以不同方式声明表的create语句?

如果有办法在单个语句中完成此操作,则在同一个表上更新多个列时也应该有效。

环境:python 3.4& pyodbc

1 个答案:

答案 0 :(得分:0)

我已经通过使用SQL Bindings解决了这个问题。似乎字符限制不适用。

在python中,语句现在看起来像这样:

pic = 'data:image/png;base64,iVBORw0KGgoASU ...'
sql = "UPDATE systesttab SET f_picture = ?"
cursor.execute( sql, [pic] )

当同时更新多个字段时,这也可以正常工作。