lets take this back to ticket #1840, since I am going to change the approach 
yet again, and I need Kent to wake up again to ensure his stuff work with the 
changes too.

http://www.sqlalchemy.org/trac/ticket/1840


On Jul 14, 2010, at 9:28 AM, Rodney wrote:

> 
> On Jul 13, 6:17 pm, Michael Bayer <[email protected]> wrote:
>> The handling was changed in 0.6, but we specifically fixed a bunch of things 
>> related to Decimal in 0.6.2.   Oracle doesn't send entirely meaningful 
>> information regarding the specifics of numeric types in a few cases 
>> (typically they involve subqueries, it appears you've found another variant 
>> of it), in those we return Decimal and let SQLA types handle further 
>> conversion.
> 
> I upgraded from 0.6.1, so the changes in 0.6.2 are the ones that are
> affecting me.
> 
>> Are you sure you were getting back integers before, and not floats, for this 
>> particular statement  ? I've observed that cx_oracle seems to choose float() 
>> in the face of ambiguity.
> 
> "print type (row.col)" produces "<type 'int'>".
> 
>>> and I
>>> know that I can convert the data to integers when I reference the
>>> columns; however, I'd prefer to deal with the conversion closer to the
>>> source.  Unfortunately, I can't figure out how to do that though I
>>> suspect it's pretty simple.
>> 
>> if you use the Integer type, that will coerce values to integer.  
> 
> Yes, but where/how? :-)
> 
>>> So, what's a good way to tell SA about the types of the columns
>>> returned by the query?
>> 
>> it depends on what kind of query you are using.    func() for example can be 
>> made to return Integer by passing in type_, func.foo(type_=Integer).  text() 
>> handles it using result_map.   Statements derived from Table just do the 
>> right thing automatically.   Its only if you use func()/text() with no 
>> return type, or execute("string"), that the typing isn't taking place, so 
>> there is always a way to get Integer in there.
> 
> Okay, here's the general form that I'm currently using...
> 
> t = "SELECT * FROM TABLE (myfunc (:a,:b))"
> q = session.query ('COL1", 'COL2", 'COL3').from_statement (t).params
> (a=v1,b=v2)
> 
> Hm...your reference to "text()" above led me to this...
> 
> t = text ("SELECT * FROM TABLE (myfunc (:a,:b))", typemap={'COL3':
> Integer})
> q = session.query ('COL1", 'COL2", 'COL3').from_statement (t).params
> (a=v1,b=v2)
> 
> That seems to do the trick.
> 
> Thanks much.
> 
> Rodney
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "sqlalchemy" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to 
> [email protected].
> For more options, visit this group at 
> http://groups.google.com/group/sqlalchemy?hl=en.
> 

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en.

Reply via email to