2016-05-30 110 views
0

我有一個包含幾列的表systesttab。其中一列是CLOB類型,它應該保存一串base64編碼圖像。用大字符串更新oracle CLOB列

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

然而,當我嘗試更新一個大的base64字符串表(超過10萬字),它失敗,我的Python應用程序崩潰(放即使try ... except塊)。

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語句?

如果有一種方法可以在單個語句中完成此操作,那麼在更新同一個表上的多個列時,它也應該可以工作。

環境:蟒蛇3.4 & pyodbc

回答

0

我已經通過使用SQL綁定解決了這個。似乎字符限制不適用於此。

Python中的語句現在看起來是這樣的:

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

同時更新多個字段時,這也能正常工作。