Re: [cx-oracle-users] Types used for values returned from a query
Brought to you by:
atuining
|
From: Leith P. <lei...@gm...> - 2005-02-09 23:32:54
|
Why cant you use cast?
>>> import cx_Oracle as O
>>> db = O.connect('sid')
>>> s = db.cursor()
>>> s.execute('select CAST( 1234 as varchar2(255)) a_string from dual')
[<StringVar object at 0x402240b0>]
On Wed, 9 Feb 2005 18:46:32 +0000, Paul Moore <p.f...@gm...> wrote:
> On Wed, 09 Feb 2005 11:08:36 -0700, Anthony Tuininga
> <an...@co...> wrote:
> > This is true in Python 2.4 and up. Python 2.3 and earlier do use an
> > internal date representation which is less powerful than the Python
> > datetime data type. I'm assuming here that you are using Python 2.4.
>
> Correct - sorry, I didn't mention this explicitly.
>
> > The way it currently works is as follows: if the Oracle data type has no
> > decimal places, the value is converted to a long/integer value;
> > otherwise, the value is converted to a float with all of its loss of
> > precision.
>
> That's pretty much what I'd determined by experiment.
>
> > When faced with this problem myself (for a program which
> > dumps the contents of arbitrary queries in a format suitable for later
> > importing) I dumped all numbers as strings.
>
> That's pretty much the same requirement as I have and so the same
> solution should apply. The only issue I have is that my loader is
> written as a Java stored procedure inside the database, so my dump
> format needs to be Java-readable.
>
> > Oracle is quite happy to accept the string as input to a numeric column. I'm
> > not sure if that will work for you but it is an option.
>
> Quite possibly. I can just bind the variable as a String in Java, and
> then load it into a Number column, I guess. Could there be any format
> issues (exponential formats, commas in numbers, etc)? I only ask
> because the environemnt makes it annoyingly hard to report errors, so
> when things go wrong it's a real pain to debug :-(
>
> > If you are interested in pursuing that option, you should take a look at the
> > OPT_NumbersAsStrings option in cx_Oracle.
>
> That sounds great. I'll look at that in the morning.
>
> > > Alternatively, is there any likelihood of cxOracle using Python 2.4's
> > > Decimal type in the near future?
> >
> > Theoretically this wouldn't be all that difficult to accomplish but
> > since there is no C implementation this would mean a significant
> > performance penalty.
> > Having used the Decimal type myself in pure Python
> > I know that it is the most efficiently coded module, either. I suppose
> > this type could be returned __only__ if the data is not an integer and
> > that would mitigate the problem somewhat. Comments?
>
> That may be an option, but frankly, this is pretty specialised use
> where an exact representation is crucial. Maybe just having a way of
> saying that a specific column in a query must be returned as a string,
> and then doing string->Decimal in Python would be suitable. Something
> like
>
> c = cn.cursor()
> c.execute("select...")
> c.col_as_string(1)
> row = c.fetchone()
> decval = Decimal(row[1])
>
> All I really care about is having some way of being sure that there's
> no precision loss - using strings does it, the rest is just
> convenience (only using strings where it's really needed).
>
> Sorry - must dash, but I hope you get the idea...
>
> Paul
>
> -------------------------------------------------------
> SF email is sponsored by - The IT Product Guide
> Read honest & candid reviews on hundreds of IT Products from real users.
> Discover which products truly live up to the hype. Start reading now.
> http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click
> _______________________________________________
> cx-oracle-users mailing list
> cx-...@li...
> https://lists.sourceforge.net/lists/listinfo/cx-oracle-users
>
|