how to manage CLOB type with cx_oracle

Loredana loredana.pier at gmail.com
Tue Mar 3 12:23:38 EST 2009


On Mar 3, 5:12 pm, "Gabriel Genellina" <gagsl-... at yahoo.com.ar> wrote:
> En Tue, 03 Mar 2009 13:33:19 -0200, Loredana <loredana.p... at gmail.com>  
> escribió:
>
>
>
>
>
> > On Mar 3, 1:01 pm, Loredana <loredana.p... at gmail.com> 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 rows_.read()
> >             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:http://www.python.org/dev/peps/pep-0249/
>
> LOBs are an extension to DBAPI -- see  http://cx-oracle.sourceforge.net/html/lob.htmland 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- Hide quoted text -
>
> - Show quoted text -

ok...
I try this code and it works:

        curs.execute(sqlstr)
        for rows in curs:
            for col in rows:
                try:
                    print col.read()
                except:
                    print col


onother question?
which is the best wey (fastest way) to discern LOB from other type?

thanks

Loredana



More information about the Python-list mailing list