Re: Using mxodbc with SQL Server 2012
John Anderson <[email protected]> Wed, 2 Sep 2015 13:14:05 -0700
| Newsgroups | gmane.comp.python.egenix.user |
|---|---|
| Message-ID | <CAOdFaDWtoZEsSvrE6=tc4rr3-=s_KXGZ5hJ8FsQpSXF4dH5u3A@mail.gmail.com> |
--===============31434811529119866== Content-Type: multipart/alternative; boundary=001a114da5e2eef2e7051ec94e07 --001a114da5e2eef2e7051ec94e07 Content-Type: text/plain; charset=UTF-8 On Wed, Sep 2, 2015 at 1:05 PM, M.-A. Lemburg <[email protected]> wrote: > On 02.09.2015 20:36, John Anderson wrote: > > Hey, We currently use pymssql and it was recommended that we checkout > > mxODBC again (its been a few years) and even though most of our projects > > require python 3 we have a few legacy python applications that are still > on > > python 2.7 so I thought I would give it a try. > > > > I'm currently getting this error: > > > > mx.ODBC.Error.OperationalError: ('08003', 0, '[unixODBC][Driver > > Manager]Connnection does not exist', 13710) > > This is a typical error message you get when the connection is found > by the ODBC manager, i.e. it is configured in the odbc.ini file, > but it cannot load it. > > This can be a permission problem or a linker problem. You can > try this to check: > > ldd /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so > > Also see our documentation for FreeTDS: > > http://www.egenix.com/products/python/mxODBC/doc/#_Toc427692966 > > A note on FreeTDS: > > You should really use the MS SQL Server Native Client for > Linux, if you can. It is much more feature complete compared > to FreeTDS and also much easier to configure: > > https://msdn.microsoft.com/en-us/library/hh568451%28v=sql.110%29.aspx > > These are the instructions from our documentation: > > http://www.egenix.com/products/python/mxODBC/doc/#_Toc427692959 > > I figured it is some type of config problem but its really odd because SQLAlchemy can make it work just fine, this lets me connect and query: from sqlalchemy import create_engine engine = create_engine('mssql+mxodbc://<secret>:<secret>@mt1') I'm looking into the MS SQL Server Native client again as well, we tried it when they first announced it and it would segfault with any significant load and they mostly support Red Hat instead of Ubuntu. I want to compare all variations of it. The reason we are finally looking at other drivers is because the pymssql driver isn't quite fast enough, when selecting 2 million records it takes about 10 seconds: $ time python pymssql_query.py 2148068 real 0m11.138s user 0m9.606s sys 0m0.724s With mxODBC + SQLAlchemy (since I can't get mxodbc to work without SA): $ time python mxodbc_sa.py 2148068 real 0m49.407s user 0m19.013s sys 0m27.161s So it looks like mxodbc is significantly slower than pymssql even though both are utilizing FreeTDS behind the scenes. I'm going to try the native driver next and then I'll let you know. Here is the output of the ldd command: ldd /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so linux-vdso.so.1 => (0x00007ffec93f6000) libodbcinst.so.2 => /usr/lib/x86_64-linux-gnu/libodbcinst.so.2 (0x00007ff192bcd000) libgssapi_krb5.so.2 => /usr/lib/x86_64-linux-gnu/libgssapi_krb5.so.2 (0x00007ff192985000) libgnutls-deb0.so.28 => /usr/lib/x86_64-linux-gnu/libgnutls-deb0.so.28 (0x00007ff19266a000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007ff19244c000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007ff192082000) libltdl.so.7 => /usr/lib/x86_64-linux-gnu/libltdl.so.7 (0x00007ff191e77000) libkrb5.so.3 => /usr/lib/x86_64-linux-gnu/libkrb5.so.3 (0x00007ff191ba8000) libk5crypto.so.3 => /usr/lib/x86_64-linux-gnu/libk5crypto.so.3 (0x00007ff191977000) libcom_err.so.2 => /lib/x86_64-linux-gnu/libcom_err.so.2 (0x00007ff191772000) libkrb5support.so.0 => /usr/lib/x86_64-linux-gnu/libkrb5support.so.0 (0x00007ff191567000) libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007ff19134c000) libp11-kit.so.0 => /usr/lib/x86_64-linux-gnu/libp11-kit.so.0 (0x00007ff191105000) libtasn1.so.6 => /usr/lib/x86_64-linux-gnu/libtasn1.so.6 (0x00007ff190ef1000) libnettle.so.4 => /usr/lib/x86_64-linux-gnu/libnettle.so.4 (0x00007ff190cc0000) libhogweed.so.2 => /usr/lib/x86_64-linux-gnu/libhogweed.so.2 (0x00007ff190a91000) libgmp.so.10 => /usr/lib/x86_64-linux-gnu/libgmp.so.10 (0x00007ff190811000) /lib64/ld-linux-x86-64.so.2 (0x00007ff193066000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007ff19060d000) libkeyutils.so.1 => /lib/x86_64-linux-gnu/libkeyutils.so.1 (0x00007ff190408000) libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007ff1901ec000) libffi.so.6 => /usr/lib/x86_64-linux-gnu/libffi.so.6 (0x00007ff18ffe3000) > > with this code: > > > > import mx.ODBC.unixODBC as mx > > db = mx.DriverConnect('DSN=mt1;UID=<secret>;PWD=<secret>') > > c = db.cursor() > > c.tables() > > res = c.fetchall() > > > > and I'm wondering might cause that because I can use isql/tsql and it > works: > > > > tsql -S mt1 -U <secret> -P <secret> > > isql mt1 <secret> <secret> > > > > osql is the only one that doesn't work: > > > > > > osql -S mt1 -U <secret> -P <secret> > > > > checking shared odbc libraries linked to isql for default directories... > > strings: '': No such file > > trying /tmp/sql ... no > > trying /tmp/sql ... no > > trying /etc ... OK > > checking odbc.ini files > > reading /home/sontek/.odbc.ini > > [mt1] not found in /home/sontek/.odbc.ini > > reading /etc/odbc.ini > > [mt1] found in /etc/odbc.ini > > found this section: > > [mt1] > > Driver = FreeTDS > > Description = ODBC connection via FreeTDS > > Trace = Yes > > TraceFile = /tmp/sql.log > > ServerName = mt1 > > Database = SM_AccountsNew > > looking for driver for DSN [mt1] in /etc/odbc.ini > > found driver line: " Driver = FreeTDS" > > driver "FreeTDS" found for [mt1] in odbc.ini > > found driver named "FreeTDS" > > "FreeTDS" is not an executable file > > looking for entry named [FreeTDS] in /etc/odbcinst.ini > > found driver line: " Driver = > > /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so" > > found driver /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so for [FreeTDS] > > in odbcinst.ini > > /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so is not an executable file > > osql: error: no driver found for mt1 > > > > > > Anyone know what I might be missing? > > > > Here is my FreeTDS: > > > > [mt1] > > host = mt1-db01.corp.surveymonkey.com > > port = 1433 > > tds version = 7.3 > > client charset = UTF-8 > > > > odbc.ini: > > > > [mt1] > > Driver = FreeTDS > > Description = ODBC connection via FreeTDS > > Trace = Yes > > TraceFile = /tmp/sql.log > > ServerName = mt1 > > Database = SM_AccountsNew > > > > > > odbcinst.ini: > > [FreeTDS] > > Description = TDS > > Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so > > Startup = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so > > UsageCount = 1 > > Threading = 2 > > > > > > > > > > _______________________________________________________________________ > > eGenix.com User Mailing List http://www.egenix.com/ > > https://www.egenix.com/mailman/listinfo/egenix-users > > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Sep 02 2015) > >>> Python Projects, Coaching and Consulting ... http://www.egenix.com/ > >>> mxODBC Plone/Zope Database Adapter ... http://zope.egenix.com/ > >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ > ________________________________________________________________________ > 2015-08-27: Released eGenix mx Base 3.2.9 ... http://egenix.com/go83 > > ::::: Try our mxODBC.Connect Python Database Interface for free ! :::::: > > eGenix.com Software, Skills and Services GmbH Pastor-Loeh-Str.48 > D-40764 Langenfeld, Germany. CEO Dipl.-Math. Marc-Andre Lemburg > Registered at Amtsgericht Duesseldorf: HRB 46611 > http://www.egenix.com/company/contact/ > --001a114da5e2eef2e7051ec94e07 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable <div dir=3D"ltr"><br><div class=3D"gmail_extra"><br><div class=3D"gmail_quo= te">On Wed, Sep 2, 2015 at 1:05 PM, M.-A. Lemburg <span dir=3D"ltr"><<a = href=3D"mailto:[email protected]" target=3D"_blank">[email protected]</a>></sp= an> wrote:<br><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px= 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left= -style:solid;padding-left:1ex"><span class=3D"">On 02.09.2015 20:36, John A= nderson wrote:<br> > Hey, We currently use pymssql and it was recommended that we checkout<= br> > mxODBC again (its been a few years) and even though most of our projec= ts<br> > require python 3 we have a few legacy python applications that are sti= ll on<br> > python 2.7 so I thought I would give it a try.<br> ><br> > I'm currently getting this error:<br> ><br> > mx.ODBC.Error.OperationalError: ('08003', 0, '[unixODBC][D= river<br> > Manager]Connnection does not exist', 13710)<br> <br> </span>This is a typical error message you get when the connection is found= <br> by the ODBC manager, i.e. it is configured in the odbc.ini file,<br> but it cannot load it.<br> <br> This can be a permission problem or a linker problem. You can<br> try this to check:<br> <br> ldd /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so<br> <br> Also see our documentation for FreeTDS:<br> <br> <a href=3D"http://www.egenix.com/products/python/mxODBC/doc/#_Toc427692966"= rel=3D"noreferrer" target=3D"_blank">http://www.egenix.com/products/python= /mxODBC/doc/#_Toc427692966</a><br> <br> A note on FreeTDS:<br> <br> You should really use the MS SQL Server Native Client for<br> Linux, if you can. It is much more feature complete compared<br> to FreeTDS and also much easier to configure:<br> <br> <a href=3D"https://msdn.microsoft.com/en-us/library/hh568451%28v=3Dsql.110%= 29.aspx" rel=3D"noreferrer" target=3D"_blank">https://msdn.microsoft.com/en= -us/library/hh568451%28v=3Dsql.110%29.aspx</a><br> <br> These are the instructions from our documentation:<br> <br> <a href=3D"http://www.egenix.com/products/python/mxODBC/doc/#_Toc427692959"= rel=3D"noreferrer" target=3D"_blank">http://www.egenix.com/products/python= /mxODBC/doc/#_Toc427692959</a><br> <div><div class=3D"h5"><br></div></div></blockquote><div><br></div><div>I f= igured it is some type of config problem but its really odd because SQLAlch= emy can make it work just fine, this lets me connect and query:</div><div><= br></div><div>from sqlalchemy import create_engine</div><div><div>engine = =3D create_engine('mssql+mxodbc://<secret>:<secret>@mt1'= ;)</div></div><div><br></div><div><br></div><div>I'm looking into the M= S SQL Server Native client again as well, we tried it when they first annou= nced it and it would segfault with any significant load and they mostly sup= port Red Hat instead of Ubuntu.=C2=A0 I want to compare all variations of i= t.</div><div><br></div><div>The reason we are finally looking at other driv= ers is because the pymssql driver isn't quite fast enough, when selecti= ng 2 million records it takes about 10 seconds:</div><div><br></div><div><d= iv>$ time python pymssql_query.py=C2=A0</div><div>2148068</div><div><br></d= iv><div>real<span class=3D"" style=3D"white-space:pre"> </span>0m11.138s</d= iv><div>user<span class=3D"" style=3D"white-space:pre"> </span>0m9.606s</di= v><div>sys<span class=3D"" style=3D"white-space:pre"> </span>0m0.724s</div>= </div><div><br></div><div>With mxODBC + SQLAlchemy (since I can't get m= xodbc to work without SA):</div><div><br></div><div><div>$ time python mxod= bc_sa.py=C2=A0</div><div>2148068<br></div><div><br></div><div>real<span cla= ss=3D"" style=3D"white-space:pre"> </span>0m49.407s</div><div>user<span cla= ss=3D"" style=3D"white-space:pre"> </span>0m19.013s</div><div>sys<span clas= s=3D"" style=3D"white-space:pre"> </span>0m27.161s</div></div><div><br></di= v><div><br></div><div>So it looks like mxodbc is significantly slower than = pymssql even though both are utilizing FreeTDS behind the scenes.</div><div= ><br></div><div>I'm going to try the native driver next and then I'= ll let you know.</div><div><br></div><div>Here is the output of the ldd com= mand:</div><div><br></div><div><div>ldd /usr/lib/x86_64-linux-gnu/odbc/libt= dsodbc.so</div><div><span class=3D"" style=3D"white-space:pre"> </span>linu= x-vdso.so.1 =3D> =C2=A0(0x00007ffec93f6000)</div><div><span class=3D"" s= tyle=3D"white-space:pre"> </span>libodbcinst.so.2 =3D> /usr/lib/x86_64-l= inux-gnu/libodbcinst.so.2 (0x00007ff192bcd000)</div><div><span class=3D"" s= tyle=3D"white-space:pre"> </span>libgssapi_krb5.so.2 =3D> /usr/lib/x86_6= 4-linux-gnu/libgssapi_krb5.so.2 (0x00007ff192985000)</div><div><span class= =3D"" style=3D"white-space:pre"> </span>libgnutls-deb0.so.28 =3D> /usr/l= ib/x86_64-linux-gnu/libgnutls-deb0.so.28 (0x00007ff19266a000)</div><div><sp= an class=3D"" style=3D"white-space:pre"> </span>libpthread.so.0 =3D> /li= b/x86_64-linux-gnu/libpthread.so.0 (0x00007ff19244c000)</div><div><span cla= ss=3D"" style=3D"white-space:pre"> </span>libc.so.6 =3D> /lib/x86_64-lin= ux-gnu/libc.so.6 (0x00007ff192082000)</div><div><span class=3D"" style=3D"w= hite-space:pre"> </span>libltdl.so.7 =3D> /usr/lib/x86_64-linux-gnu/libl= tdl.so.7 (0x00007ff191e77000)</div><div><span class=3D"" style=3D"white-spa= ce:pre"> </span>libkrb5.so.3 =3D> /usr/lib/x86_64-linux-gnu/libkrb5.so.3= (0x00007ff191ba8000)</div><div><span class=3D"" style=3D"white-space:pre">= </span>libk5crypto.so.3 =3D> /usr/lib/x86_64-linux-gnu/libk5crypto.so.3= (0x00007ff191977000)</div><div><span class=3D"" style=3D"white-space:pre">= </span>libcom_err.so.2 =3D> /lib/x86_64-linux-gnu/libcom_err.so.2 (0x00= 007ff191772000)</div><div><span class=3D"" style=3D"white-space:pre"> </spa= n>libkrb5support.so.0 =3D> /usr/lib/x86_64-linux-gnu/libkrb5support.so.0= (0x00007ff191567000)</div><div><span class=3D"" style=3D"white-space:pre">= </span>libz.so.1 =3D> /lib/x86_64-linux-gnu/libz.so.1 (0x00007ff19134c0= 00)</div><div><span class=3D"" style=3D"white-space:pre"> </span>libp11-kit= .so.0 =3D> /usr/lib/x86_64-linux-gnu/libp11-kit.so.0 (0x00007ff191105000= )</div><div><span class=3D"" style=3D"white-space:pre"> </span>libtasn1.so.= 6 =3D> /usr/lib/x86_64-linux-gnu/libtasn1.so.6 (0x00007ff190ef1000)</div= ><div><span class=3D"" style=3D"white-space:pre"> </span>libnettle.so.4 =3D= > /usr/lib/x86_64-linux-gnu/libnettle.so.4 (0x00007ff190cc0000)</div><di= v><span class=3D"" style=3D"white-space:pre"> </span>libhogweed.so.2 =3D>= ; /usr/lib/x86_64-linux-gnu/libhogweed.so.2 (0x00007ff190a91000)</div><div>= <span class=3D"" style=3D"white-space:pre"> </span>libgmp.so.10 =3D> /us= r/lib/x86_64-linux-gnu/libgmp.so.10 (0x00007ff190811000)</div><div><span cl= ass=3D"" style=3D"white-space:pre"> </span>/lib64/ld-linux-x86-64.so.2 (0x0= 0007ff193066000)</div><div><span class=3D"" style=3D"white-space:pre"> </sp= an>libdl.so.2 =3D> /lib/x86_64-linux-gnu/libdl.so.2 (0x00007ff19060d000)= </div><div><span class=3D"" style=3D"white-space:pre"> </span>libkeyutils.s= o.1 =3D> /lib/x86_64-linux-gnu/libkeyutils.so.1 (0x00007ff190408000)</di= v><div><span class=3D"" style=3D"white-space:pre"> </span>libresolv.so.2 = =3D> /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007ff1901ec000)</div><div= ><span class=3D"" style=3D"white-space:pre"> </span>libffi.so.6 =3D> /us= r/lib/x86_64-linux-gnu/libffi.so.6 (0x00007ff18ffe3000)</div></div><div><br= ></div><div><br></div><div><br></div><div>=C2=A0</div><blockquote class=3D"= gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left-width:1px;border= -left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div= ><div class=3D"h5"> > with this code:<br> ><br> > import mx.ODBC.unixODBC as mx<br> > db =3D mx.DriverConnect('DSN=3Dmt1;UID=3D<secret>;PWD=3D<= secret>')<br> > c =3D db.cursor()<br> > c.tables()<br> > res =3D c.fetchall()<br> ><br> > and I'm wondering might cause that because I can use isql/tsql and= it works:<br> ><br> > tsql -S mt1 -U <secret> -P <secret><br> > isql mt1 <secret> <secret><br> ><br> > osql is the only one that doesn't work:<br> ><br> ><br> > osql -S mt1 -U <secret> -P <secret><br> ><br> > checking shared odbc libraries linked to isql for default directories.= ..<br> > strings: '': No such file<br> > trying /tmp/sql ... no<br> > trying /tmp/sql ... no<br> > trying /etc ... OK<br> > checking odbc.ini files<br> > reading /home/sontek/.odbc.ini<br> > [mt1] not found in /home/sontek/.odbc.ini<br> > reading /etc/odbc.ini<br> > [mt1] found in /etc/odbc.ini<br> > found this section:<br> > [mt1]<br> > Driver=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =3D FreeTDS<br> > Description=C2=A0 =C2=A0 =C2=A0=3D ODBC connection via FreeTDS<br> > Trace=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=3D Yes<br> > TraceFile=C2=A0 =C2=A0 =C2=A0 =C2=A0=3D /tmp/sql.log<br> > ServerName=C2=A0 =C2=A0 =C2=A0 =3D mt1<br> > Database=C2=A0 =C2=A0 =C2=A0 =C2=A0 =3D SM_AccountsNew<br> > looking for driver for DSN [mt1] in /etc/odbc.ini<br> >=C2=A0 =C2=A0found driver line: " Driver=C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =3D FreeTDS"<br> >=C2=A0 =C2=A0driver "FreeTDS" found for [mt1] in odbc.ini<br> > found driver named "FreeTDS"<br> > "FreeTDS" is not an executable file<br> > looking for entry named [FreeTDS] in /etc/odbcinst.ini<br> >=C2=A0 =C2=A0found driver line: " Driver=C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =3D<br> > /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so"<br> >=C2=A0 =C2=A0found driver /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so = for [FreeTDS]<br> > in odbcinst.ini<br> > /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so is not an executable file= <br> > osql: error: no driver found for mt1<br> ><br> ><br> > Anyone know what I might be missing?<br> ><br> > Here is my FreeTDS:<br> ><br> > [mt1]<br> >=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0host =3D <a href=3D"http://mt1-db01.c= orp.surveymonkey.com" rel=3D"noreferrer" target=3D"_blank">mt1-db01.corp.su= rveymonkey.com</a><br> >=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0port =3D 1433<br> >=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0tds version =3D 7.3<br> >=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0client charset =3D UTF-8<br> ><br> > odbc.ini:<br> ><br> > [mt1]<br> > Driver=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =3D FreeTDS<br> > Description=C2=A0 =C2=A0 =C2=A0=3D ODBC connection via FreeTDS<br> > Trace=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=3D Yes<br> > TraceFile=C2=A0 =C2=A0 =C2=A0 =C2=A0=3D /tmp/sql.log<br> > ServerName=C2=A0 =C2=A0 =C2=A0 =3D mt1<br> > Database=C2=A0 =C2=A0 =C2=A0 =C2=A0 =3D SM_AccountsNew<br> ><br> ><br> > odbcinst.ini:<br> > [FreeTDS]<br> > Description=C2=A0 =C2=A0 =C2=A0=3D TDS<br> > Driver=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =3D /usr/lib/x86_64-linux-gnu= /odbc/libtdsodbc.so<br> > Startup=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=3D /usr/lib/x86_64-linux-gnu= /odbc/libtdsS.so<br> > UsageCount=C2=A0 =C2=A0 =C2=A0 =3D 1<br> > Threading=C2=A0 =C2=A0 =C2=A0 =C2=A0=3D 2<br> ><br> ><br> ><br> ><br> </div></div>> __________________________________________________________= _____________<br> > eGenix.com User Mailing List=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0<a href=3D"http://www.egenix.com/" rel=3D= "noreferrer" target=3D"_blank">http://www.egenix.com/</a><br> > <a href=3D"https://www.egenix.com/mailman/listinfo/egenix-users" rel= =3D"noreferrer" target=3D"_blank">https://www.egenix.com/mailman/listinfo/e= genix-users</a><br> ><br> <br> --<br> Marc-Andre Lemburg<br> eGenix.com<br> <br> Professional Python Services directly from the Source=C2=A0 (#1, Sep 02 201= 5)<br> >>> Python Projects, Coaching and Consulting ...=C2=A0 <a href=3D"= http://www.egenix.com/" rel=3D"noreferrer" target=3D"_blank">http://www.ege= nix.com/</a><br> >>> mxODBC Plone/Zope Database Adapter ...=C2=A0 =C2=A0 =C2=A0 =C2= =A0<a href=3D"http://zope.egenix.com/" rel=3D"noreferrer" target=3D"_blank"= >http://zope.egenix.com/</a><br> >>> mxODBC, mxDateTime, mxTextTools ...=C2=A0 =C2=A0 =C2=A0 =C2=A0= <a href=3D"http://python.egenix.com/" rel=3D"noreferrer" target=3D"_blank"= >http://python.egenix.com/</a><br> ________________________________________________________________________<br= > 2015-08-27: Released eGenix mx Base 3.2.9 ...=C2=A0 =C2=A0 =C2=A0<a href=3D= "http://egenix.com/go83" rel=3D"noreferrer" target=3D"_blank">http://egenix= .com/go83</a><br> <br> ::::: Try our mxODBC.Connect Python Database Interface for free ! ::::::<br= > <br> =C2=A0 =C2=A0eGenix.com Software, Skills and Services GmbH=C2=A0 Pastor-Loe= h-Str.48<br> =C2=A0 =C2=A0 D-40764 Langenfeld, Germany. CEO Dipl.-Math. Marc-Andre Lembu= rg<br> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Registered at Amtsgericht Duesseld= orf: HRB 46611<br> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0<a href=3D"http://ww= w.egenix.com/company/contact/" rel=3D"noreferrer" target=3D"_blank">http://= www.egenix.com/company/contact/</a><br> </blockquote></div><br></div></div> --001a114da5e2eef2e7051ec94e07-- --===============31434811529119866== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit _______________________________________________________________________ eGenix.com User Mailing List http://www.egenix.com/ https://www.egenix.com/mailman/listinfo/egenix-users --===============31434811529119866==--