Hello. UPDATE: The raw SqlSoup.execute() works:
import pyodbc from sqlalchemy.engine import create_engine from sqlalchemy.ext.sqlsoup import SqlSoup def connect(): return pyodbc.connect('DRIVER={FreeTDS};SERVER=10.230.128.140;PORT=1433;DATABASE=ZFP_CRM;UID=efractal;PWD=efR@cZFP13;TDS_VERSION=8.0;') engine = create_engine('mssql+pyodbc://', creator=connect) db = SqlSoup(engine) x = db.execute("select * from mlm_spol").fetchone() print x Any ideas what I have to do to make SqlSoup's ORM work? I am out of ideas. Ladislav Lenart On 8.10.2012 15:02, Ladislav Lenart wrote: > Hello again. > > It turned out that I was missing some ODBC-related packages and also needed to > configure freetds to work with unixodbc. I managed to finally do it, though it > was by no means easy for me (trial and error of several tutorials). > > The following code works now: > > import pyodbc > cnxn = > pyodbc.connect('DRIVER={FreeTDS};SERVER=1.2.3.4;PORT=1433;DATABASE=ZFP_CRM;UID=username;PWD=pass@cword;TDS_VERSION=8.0') > cursor = cnxn.cursor() > cursor.execute("select * from mlm_spol") > row = cursor.fetchone() > print row > > > However SqlSoup does not work. The code: > > import pyodbc > from sqlalchemy.engine import create_engine > from sqlalchemy.ext.sqlsoup import SqlSoup > def connect(): > return > pyodbc.connect('DRIVER={FreeTDS};SERVER=10.230.128.140;PORT=1433;DATABASE=ZFP_CRM;UID=efractal;PWD=efR@cZFP13;TDS_VERSION=8.0;') > engine = create_engine('mssql+pyodbc://', creator=connect) > db = SqlSoup(engine) > row = db.mlm_spol.first() > print row > > > fails with: > > Traceback (most recent call last): > File "/home/lada/mine/devel/python/ZFP/zfp_connect.py", line 16, in <module> > x = db.mlm_spol.first() > File "/usr/lib/python2.7/dist-packages/sqlalchemy/ext/sqlsoup.py", line 807, > in __getattr__ > return self.entity(attr) > File "/usr/lib/python2.7/dist-packages/sqlalchemy/ext/sqlsoup.py", line 804, > in entity > return self.map_to(attr, tablename=attr, schema=schema) > File "/usr/lib/python2.7/dist-packages/sqlalchemy/ext/sqlsoup.py", line 684, > in map_to > schema=schema or self.schema) > File "/usr/lib/python2.7/dist-packages/sqlalchemy/schema.py", line 318, in > __new__ > table._init(name, metadata, *args, **kw) > File "/usr/lib/python2.7/dist-packages/sqlalchemy/schema.py", line 381, in > _init > self._autoload(metadata, autoload_with, include_columns) > File "/usr/lib/python2.7/dist-packages/sqlalchemy/schema.py", line 397, in > _autoload > self, include_columns, exclude_columns > File "/usr/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line > 2426, > in run_callable > return conn.run_callable(callable_, *args, **kwargs) > File "/usr/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line > 1969, > in run_callable > return callable_(self, *args, **kwargs) > File "/usr/lib/python2.7/dist-packages/sqlalchemy/engine/default.py", line > 260, in reflecttable > return insp.reflecttable(table, include_columns, exclude_columns) > File "/usr/lib/python2.7/dist-packages/sqlalchemy/engine/reflection.py", > line > 412, in reflecttable > raise exc.NoSuchTableError(table.name) > sqlalchemy.exc.NoSuchTableError: mlm_spol > > > Any ideas? > > > Thanks, > > Ladislav Lenart > > > On 8.10.2012 11:11, Ladislav Lenart wrote: >> Hello. >> >>> otherwise, I'd consider using pyodbc for which the dialect and DBAPI are >> production quality. I use pyodbc with FreeTDS on unix platforms in >> production. >> >> Ok, I can use pyodbc if it is the preferred choice. However I cannot make it >> work either. I suspect that I supply bad connection string but am a little >> lost >> in the docs... >> >> The code: >> >> from sqlalchemy.ext.sqlsoup import SqlSoup >> >> if __name__ == '__main__': >> conn_string = >> 'mssql+pyodbc://username:pass\@word@10.230.128.140:1433/ZFP_CRM' >> db = SqlSoup(conn_string) >> x = db.zfp_mlm_spol.first() >> >> >> fails (see the traceback below). Note the password contains the character >> '@'. >> The preceeding '\' is my attempt to escape it. >> >> What connection string should I use to connect to MSSQL via pyodbc using >> freetds? >> >> Thank you, >> >> Ladislav Lenart >> >> >> THE TRACEBACK: >> >> Traceback (most recent call last): >> File >> "/home/lada/.eclipse/org.eclipse.platform_3.8_155965261/plugins/org.python.pydev_2.6.0.2012062818/pysrc/pydevd.py", >> line 1392, in <module> >> debugger.run(setup['file'], None, None) >> File >> "/home/lada/.eclipse/org.eclipse.platform_3.8_155965261/plugins/org.python.pydev_2.6.0.2012062818/pysrc/pydevd.py", >> line 1085, in run >> pydev_imports.execfile(file, globals, locals) #execute the script >> File "/home/lada/mine/devel/python/ZFP/zfp_connect.py", line 11, in >> <module> >> x = db.zfp_mlm_spol.first() >> File "/usr/lib/python2.7/dist-packages/sqlalchemy/ext/sqlsoup.py", line >> 807, >> in __getattr__ >> return self.entity(attr) >> File "/usr/lib/python2.7/dist-packages/sqlalchemy/ext/sqlsoup.py", line >> 804, >> in entity >> return self.map_to(attr, tablename=attr, schema=schema) >> File "/usr/lib/python2.7/dist-packages/sqlalchemy/ext/sqlsoup.py", line >> 684, >> in map_to >> schema=schema or self.schema) >> File "/usr/lib/python2.7/dist-packages/sqlalchemy/schema.py", line 318, in >> __new__ >> table._init(name, metadata, *args, **kw) >> File "/usr/lib/python2.7/dist-packages/sqlalchemy/schema.py", line 381, in >> _init >> self._autoload(metadata, autoload_with, include_columns) >> File "/usr/lib/python2.7/dist-packages/sqlalchemy/schema.py", line 397, in >> _autoload >> self, include_columns, exclude_columns >> File "/usr/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line >> 2424, >> in run_callable >> conn = self.contextual_connect() >> File "/usr/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line >> 2490, >> in contextual_connect >> self.pool.connect(), >> File "/usr/lib/python2.7/dist-packages/sqlalchemy/pool.py", line 224, in >> connect >> return _ConnectionFairy(self).checkout() >> File "/usr/lib/python2.7/dist-packages/sqlalchemy/pool.py", line 387, in >> __init__ >> rec = self._connection_record = pool._do_get() >> File "/usr/lib/python2.7/dist-packages/sqlalchemy/pool.py", line 741, in >> _do_get >> con = self._create_connection() >> File "/usr/lib/python2.7/dist-packages/sqlalchemy/pool.py", line 188, in >> _create_connection >> return _ConnectionRecord(self) >> File "/usr/lib/python2.7/dist-packages/sqlalchemy/pool.py", line 270, in >> __init__ >> self.connection = self.__connect() >> File "/usr/lib/python2.7/dist-packages/sqlalchemy/pool.py", line 330, in >> __connect >> connection = self.__pool._creator() >> File "/usr/lib/python2.7/dist-packages/sqlalchemy/engine/strategies.py", >> line >> 80, in connect >> return dialect.connect(*cargs, **cparams) >> File "/usr/lib/python2.7/dist-packages/sqlalchemy/engine/default.py", line >> 281, in connect >> return self.dbapi.connect(*cargs, **cparams) >> sqlalchemy.exc.DBAPIError: (Error) ('IM002', '[IM002] [unixODBC][Driver >> Manager]Data source name not found, and no default driver specified (0) >> (SQLDriverConnectW)') None None >> >> >> On 6.10.2012 00:47, Michael Bayer wrote: >>> what I can do for the moment is this patch, if you want to try it: >>> >>> diff -r 17cab4ad55d5 lib/sqlalchemy/dialects/mssql/pymssql.py >>> --- a/lib/sqlalchemy/dialects/mssql/pymssql.py Thu Oct 04 18:26:55 >>> 2012 -0400 >>> +++ b/lib/sqlalchemy/dialects/mssql/pymssql.py Fri Oct 05 18:46:01 >>> 2012 -0400 >>> @@ -80,7 +80,7 @@ >>> def _get_server_version_info(self, connection): >>> vers = connection.scalar("select @@version") >>> m = re.match( >>> - r"Microsoft SQL Server.*? - (\d+).(\d+).(\d+).(\d+)", vers) >>> + r"\s*Microsoft SQL Server.*? - (\d+).(\d+).(\d+).(\d+)", vers) >>> if m: >>> return tuple(int(x) for x in m.group(1, 2, 3, 4)) >>> else: >>> >>> >>> >>> otherwise, I'd consider using pyodbc for which the dialect and DBAPI are >>> production quality. I use pyodbc with FreeTDS on unix platforms in >>> production. >>> >>> >>> >>> >>> On Oct 5, 2012, at 1:40 PM, lenart...@volny.cz wrote: >>> >>>> Hello. >>>> >>>>> I dont have easy access to pymssql here so can you fully define what >>>>> "fails" means ? stack trace ? >>>> >>>> I don't have access to my development environment during the weekend, so I >>>> cannot provide you with a stacktrace, but I try to better describe the >>>> issue: >>>> >>>> def _get_server_version_info(self, connection) >>>> vers = connection.scalar("select @@version") >>>> m = re.match(r"Microsoft SQL Server.*? - (\d+).(\d+).(\d+).(\d+)", >>>> vers) >>>> ... >>>> >>>> The above code snippet is from the file pymssql (around line 80). The >>>> variable vers is set to None and because of that the following regex fails >>>> with error "Expected string or buffer". The None is returned by the call >>>> to scalar(). The code snippet (from memory, I don't remember its exact >>>> location and form): >>>> >>>> iter(resultproxy).next() >>>> >>>> is called to get a next (first) result from the result proxy and it simply >>>> returns None as if there were no rows. >>>> >>>> Ladislav Lenart >>>> >>>> >>>> Od: "Michael Bayer" <mike...@zzzcomputing.com> >>>>> On Oct 5, 2012, at 9:40 AM, Ladislav Lenart wrote: >>>>> >>>>>> Hello. >>>>>> >>>>>> I try to access a Microsoft SQL database from Linux (Debian testing): >>>>>> >>>>>> from sqlalchemy.ext.sqlsoup import SqlSoup >>>>>> >>>>>> conn_string = 'mssql+pymssql://user:pass@freetds_name' >>>>>> db = SqlSoup(conn_string) >>>>>> v = db.some_table.first() >>>>>> print v >>>>>> >>>>>> freetds_name is the section name from /etc/freetds/freetds.conf >>>>>> >>>>>> [freetds_name] >>>>>> host = ... >>>>>> port = 1433 >>>>>> tds version = 7.1 >>>>>> asa database = DB >>>>>> >>>>>> The above script fails >>>>> >>>>> >>>>> I dont have easy access to pymssql here so can you fully define what >>>>> "fails" means ? stack trace ? >>>>> >>>>> >>>>> >>>>> >>>>>> in pymssql on line 83, because line 81 sets vers to None: >>>>>> >>>>>> def _get_server_version_info(self, connection): >>>>>> vers = connection.scalar("select @@version") >>>>>> m = re.match( >>>>>> r"Microsoft SQL Server.*? - (\d+).(\d+).(\d+).(\d+)", vers) >>>>>> if m: >>>>>> return tuple(int(x) for x in m.group(1, 2, 3, 4)) >>>>>> else: >>>>>> return None >>>>>> >>>>>> But the following works in tsql: >>>>>> >>>>>> 1> select @@version >>>>>> 2> go >>>>>> >>>>>> Microsoft SQL Server 2008 R2 (RTM) - 10.50.1617.0 (X64) >>>>>> Apr 22 2011 19:23:43 >>>>>> Copyright (c) Microsoft Corporation >>>>>> Workgroup Edition (64-bit) on Windows NT 6.1 <X64> >>>>>> (Build 7601: Service Pack 1) (Hypervisor) >>>>>> >>>>>> (1 row affected) >>>>>> >>>>>> >>>>>> Any idea what is wrong? >>>>>> >>>>>> >>>>>> Thank you, >>>>>> >>>>>> Ladislav Lenart >>>>>> >>>>>> -- >>>>>> You received this message because you are subscribed to the Google >>>>>> Groups "sqlalchemy" group. >>>>>> To post to this group, send email to sqlalchemy@googlegroups.com. >>>>>> To unsubscribe from this group, send email to >>>>>> sqlalchemy+unsubscr...@googlegroups.com. >>>>>> 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 sqlalchemy@googlegroups.com. >>>>> To unsubscribe from this group, send email to >>>>> sqlalchemy+unsubscr...@googlegroups.com. >>>>> 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 sqlalchemy@googlegroups.com. >>>> To unsubscribe from this group, send email to >>>> sqlalchemy+unsubscr...@googlegroups.com. >>>> 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 sqlalchemy@googlegroups.com. To unsubscribe from this group, send email to sqlalchemy+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en.