Turns out it was a bug in FreeTDS... See here:
http://lists.ibiblio.org/pipermail/freetds/2010q3/026214.html
This is fixed in the CVS head of FreeTDS as of Aug 4, 2010. Until
this change makes it into a release, the nightly build is available
here:
ftp://ibiblio.unc.edu/pub/Linux/ALPHA/freetds/current/freetds-current.tgz
I built this and confirmed that it works correctly with web2py. I
built it with the following commands:
cd ~
wget
ftp://ftp.ibiblio.org/pub/Linux/ALPHA/freetds/current/freetds-current.tgz
tar xzvf freetds-stable.tgz
cd freetds-0.83.dev.20100804/ (Your version of TDS will be
different)
./configure --prefix=/usr --sysconfdir=/etc --with-tdsver=8.0 --enable-
msdblib
sudo make && sudo make install clean
However, the option to set the TDS Version to 8.0 did not seem to take
for some reason (maybe I should have used 'sudo' to execute the
configure command as root). I fought with that for a long time before
realizing I could pass that setting in the web2py connection string:
db = DAL('mssql://
user:p...@dbserver.domain.com/DBName?
DRIVER=FreeTDS;TDS_Version=8.0')
Hopefully this information will be useful to someone.
On Jul 30, 11:52 am, mwolfe02 <
michael.joseph.wo...@gmail.com> wrote:
> Massimo,
>
> Per your first post:
>
> If I run the query using DAL, I get a Decimal type back for both
> environments. Of course, there is no way for web2py to make that
> coercion for fields returned from .executesql. Since that minimizes
> the pain greatly for me, I think I will just go ahead with explicitly
> converting to Decimals when working with .executesql.
>
> If I learn anything with reference toFreeTDSI'll be sure to come
> back and post that here.
>
> Thanks to you and Michele for the help.
>
> On Jul 30, 11:19 am, Michael Wolfe <
michael.joseph.wo...@gmail.com>
> wrote:
>
>
>
> > Touché! Point taken on the commercial software.... :)
>
> > As a fall-back plan, there is an acceptable workaround. I can
> > explicitly convert the floats I receive into Decimals. Based on
> > Massimo's post, it looks like this will only be an issue for money
> > fields returned from a .executesql statement. For all other queries
> > where I can leverage the DAL, I think web2py will handle things just
> > fine.
>
> > I'm going to post a message to theFreeTDSmessage board and see what
> > I can learn.
>
> > On Fri, Jul 30, 2010 at 11:08 AM, Michele Comitini
>
> > <
michele.comit...@gmail.com> wrote:
>
> > > 2010/7/30 mwolfe02 <
michael.joseph.wo...@gmail.com>
>
> > >> Ideally, I'd like to avoid having to purchase a commercial product.
>
> > > Alas you are using a commercial product.
> > > indeed this is what you should look at:
> > >
http://www.egenix.com/products/python/mxODBCConnect/
>
> > > That said it could be just a problem with the python adapter offreetds
> > > pymssql.
>
> > >> Plus, I don't think it would work. mxODBC appears to be a replacement
> > >> for pyodbc. It looks like mxODBC usesFreeTDSjust like pyodbc. The
> > >> problem appears to be withFreeTDS, so mxODBC doesn't look like it
> > >> "Added new experimental subpackage mx.ODBC.FreeTDSwhich allows
> > >> connecting to MS SQL Server from Unix. This is still far from even
> > >> being called alpha due to the current lack of implementation support
> > >> of many important ODBC APIs in theFreeTDSODBC driver."
>
> > >> The problem still seems to beFreeTDS.
>
> > >> On Jul 30, 9:42 am, Michele Comitini <
michele.comit...@gmail.com>
> > >> wrote:
> > >> > you can try with mxodbchttp://
www.egenix.com/products/python/mxODBC/
>
> > >> > 2010/7/30 mwolfe02 <
michael.joseph.wo...@gmail.com>
>
> > >> > > For background, refer to related questions on SO:
> > >> > >
http://stackoverflow.com/questions/3364699/
> > >> > >
http://stackoverflow.com/questions/3371795/
>
> > >> > > 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:p...@10.0.8.30/TaxDB?DRIVER={FreeTDS}<
http://user:p...@10.0.8.30/TaxDB?DRIVER=%7BFreeTDS%7D>
> > >> > > ',
> > >> > > migrate=False)
> > >> > > elif
os.name=='nt': #Windows
> > >> > > db = DAL('mssql://
u...@127.0.0.1/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 withFreeTDS.
> > >> > > 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 toFreeTDSto connect to SQL Server from