how to manage CLOB type with cx_oracle

Gabriel Genellina gagsl-py2 at
Tue Mar 3 17:12:36 CET 2009

En Tue, 03 Mar 2009 13:33:19 -0200, Loredana <loredana.pier at>  

> On Mar 3, 1:01 pm, Loredana <loredana.p... at> wrote:
>> Hi,
>> I need to read CLOB field type (it is long text)
>> if I use this code:
>> curs.execute(sqlstr)
>> rows['name_of_columns']     =   name_of_columns
>> rows['data']                         =   curs.fetchall()
>> it returns me this values:
>> test = {'name_of_columns': ['FILENAME', 'CRONTIME', 'SHORT_TAIL',
>> 'LONG_TAIL'], 'data': [('dd','asdds','adadsa',<cx_Oracle.LOB object at
>> 0x2a955bc230>')]}
>> any ideas?
>> Thanks
>> Lory
> Hi all,
> I success to read one row with the following code:
>         curs.execute(sqlstr)
>         name_of_columns =   []
>         for fieldDesc in curs.description:
>             name_of_columns.append(fieldDesc[0])
>         for rows_ in curs.fetchone():
>             try:
>                 print
>             except:
>                 print "except. ",rows_
> but if I try with fetchmany() it doesn't work
> any ideas?

cx_Oracle implements DBAPI 2.0, then you should follow the general  
guidelines in the specification:

LOBs are an extension to DBAPI -- see and carefully read the  
second note:

"""Note: Internally, Oracle uses LOB locators which are allocated based on  
the cursor array size. Thus, it is important that the data in the LOB  
object be manipulated before another internal fetch takes place. The  
safest way to do this is to use the cursor as an iterator. In particular,  
do not use the fetchall() method. The exception “LOB variable no longer  
valid after subsequent fetch” will be raised if an attempt to access a LOB  
variable after a subsequent fetch is detected."""

Gabriel Genellina

More information about the Python-list mailing list