2016-05-30 21 views
0

私はいくつかの列を含むsystesttabという表を持っています。これらの列の1つはCLOB型で、base64でエンコードされたイメージの文字列を保持することになっています。しかし大きな列のOracle CLOB列の更新

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

、私は(100K文字の上に)大きなbase64文字列を持つテーブルを更新しようと、それは失敗し、私の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

どのように私は1つのステートメントでテーブルを更新することができますか?

テーブルのcreateステートメントを別に宣言する必要はありますか?

これを単一のステートメントで処理する方法がある場合は、同じテーブルで複数の列を更新する場合にも機能するはずです。

環境:Pythonの3.4 & pyodbc

答えて

0

私は、SQLのバインディングを使用してこれを解決してきました。文字の制限が当てはまらないようです。

Pythonでのステートメントは、次のようになります。

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

同時に複数のフィールドを更新するときにこれはまた、正常に動作します。

関連する問題