Re: cx_Oracle cursor.var Example

"Solomon, Scott" <[email protected]>
Newsgroups gmane.comp.python.db.cx-oracle
Message-ID <[email protected]>
Thanks a lot for your input, Doug.  That was very helpful.

-----------
Scott S.


-----Original Message-----
From: Doug Henderson [mailto:[email protected]] 
Sent: Thursday, October 23, 2014 6:18 PM
To: cx-oracle-users-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org
Subject: Re: [cx-oracle-users] cx_Oracle cursor.var Example

On 23 October 2014 14:31, Solomon, Scott \ wrote:
> Ok, getting closer.  Causes another error.  I think I still need to 
> convert variable 'line' to string somehow:
>
>
>   File "C:\Users\{redacted}\gensim\models\lsimodel.py", line 513, in 
> show_topics
>     if i < len(self.projection.s):
>

Your problem is more a python one than a cx_Oracle problem, but i will try to set you on the right path.

Open a python console, and follow along. I am using python3, python2 with "from __future__ import print_function" also works, or just translate the print function calls on the fly.

>>> result = [ ( 'proj 1 title' , ) , ( 'proj 2 title' , ) , ( 'proj 3 
>>> title' , ) , ] result
[('proj 1 title',),('proj 2 title',),('proj 3 title',),]

This is sort of what the result set of the cursor looks like, if you used a statement like

>>> result = cur.fetchall ( )

after executing your cursor. Here, you get back a list of rows, where each row is a tuple of column values. when you use the cursor in the for statement, you are getting back a generator that will give you the next row tuple on each iteration. The actual type of the column values may be cx_Oracle defined types that are automatically converted to regular python strings and number when you use them.

The result of a list comprehension is a generator object. It is almost the same as the list object, in practice. (Not PEP8, to make brackets and parenthesis easier to see.)

>>> print ( row for row in result )
<generator object <genexpr> at 0x0000000002319DC8>
>>> print ( [ row for row in result ] )
[('a',), ('b',), ('c',)]

Notice how I get the column values:
>>> print ( [ row [ 0 ] for row in result ] )
['a', 'b', 'c']
>>> print ( [ row [ 0 ] . upper ( ) for row in result ] )
['A', 'B', 'C']
>>> print ( row [ 0 ] . upper ( ) for row in result )
<generator object <genexpr> at 0x0000000002319D80>

So your corpora.Dictionary() constructor is getting passed a generator object. If it expects a list() type object it may do the wrong thing.
Just add the square brackets to pass a list object instead of the generator object. Likewise, if down in the the guts of that code, something is expecting a string and chokes on the actual type passed back from cx_Oracle, you can convert the value using something like:

>>> print ( [ str ( row [ 0 ] ) . upper ( ) for row in result ] )
['A', 'B', 'C']

Doug

--
Doug Henderson, Calgary, Alberta, Canada

------------------------------------------------------------------------------
_______________________________________________
cx-oracle-users mailing list
cx-oracle-users-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org
https://lists.sourceforge.net/lists/listinfo/cx-oracle-users

------------------------------------------------------------------------------
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.