I'm using .executesql. I added a line to sql.py for debugging
purposes. It returns the second column of the first row of results (a
SUM of a SQL Server money column):
diff --git a/gluon/sql.py b/gluon/sql.py
--- a/gluon/sql.py
+++ b/gluon/sql.py
@@ -1389,6 +1389,7 @@
data = self._cursor.fetchall()
# convert the list for each row into a dictionary so it's
# easier to work with. row['field_name'] rather than
row[0]
+ raise RuntimeError(type(data[0][1]))
return [dict(zip(fields,row)) for row in data]
# see if any results returned from database
try:
When I run on Windows, I get:
RuntimeError: <class 'decimal.Decimal'>
When I run on Linux, I get:
RuntimeError: <type 'float'>
On Jul 30, 10:32 am, mdipierro <[email protected]> wrote:
> Are they both connecting to the same database?
> Can you provide an example of how you insert and how you extract data?
>
> This is to understand the issue better. In fact
> gluon/sql.py contains the following code:
>
> ...
> elif field.type[:7] == 'decimal' and value != None:
> decimals = [int(x) for x in
> field.type[8:-1].split(',')][-1]
> if field._db._dbname == 'sqlite':
> value = ('%.'+str(decimals)+'f') % value
> if not isinstance(value,decimal.Decimal):
> value = decimal.Decimal(str(value))
> ...
>
> so technically even if the database where to return float (wrong),
> web2py should still return decimal. Is this the case for you?
>
> On Jul 30, 8:35 am, mwolfe02 <[email protected]> wrote:
>
>
>
> > For background, refer to related questions on
> > SO:http://stackoverflow.com/questions/3364699/http://stackoverflow.com/q...
>
> > I'm developing my app on Windows, but will be deploying it on a Linux
> > server. The following lines are from the top of my db.py:
>
> > if os.name=='posix': #Ubuntu
> > db = DAL('mssql://user:[email protected]/TaxDB?DRIVER={FreeTDS}',
> > migrate=False)
> > elif os.name=='nt': #Windows
> > db = DAL('mssql://[email protected]/TaxDB_Dev?
> > Trusted_Connection=Yes', migrate=False)
>
> > The problem I am running into is that on Windows, my MS SQL money
> > fields are returned as Python Decimals. However, on Linux, those same
> > fields are returned as floats. I think the issue is with FreeTDS.
> > The above lines are the _only_ lines that are different between my
> > production and development versions. Obviously, the environments
> > themselves are vastly different.
>
> > Is there an alternative to FreeTDS to connect to SQL Server from
> > Linux? Do I need to provide some additional info in my connection
> > string? Am I just stuck because I'm accessing SQL Server from Linux?
>
> > Thanks in advance for any insight.