If it helps, I have finally got my system working, now using FreeTDS  
0.82, SQLAlchemy 0.5.3, pymssql, Python 2.5, (all on Mac Leopard) and  
SQL Server 2005 (on an WinXP vm).

With this setup, your test passes without any problems.

I also tried it out using pyodbc 2.1.5 and the test failed with this  
traceback:

======================================================================
ERROR: sql_test.Tester.test_orm_relation
----------------------------------------------------------------------
Traceback (most recent call last):
   File "/Users/singletoned/.envs/pyodbc25/lib/python2.5/site-packages/ 
nose-0.10.4-py2.5.egg/nose/case.py", line 363, in setUp
     try_run(self.inst, ('setup', 'setUp'))
   File "/Users/singletoned/.envs/pyodbc25/lib/python2.5/site-packages/ 
nose-0.10.4-py2.5.egg/nose/util.py", line 453, in try_run
     return func()
   File "/Users/singletoned/temp/sql_test.py", line 35, in setup
     metadata.create_all()
   File "/Users/singletoned/.envs/pyodbc25/lib/python2.5/site-packages/ 
SQLAlchemy-0.5.3-py2.5.egg/sqlalchemy/schema.py", line 1765, in  
create_all
     bind.create(self, checkfirst=checkfirst, tables=tables)
   File "/Users/singletoned/.envs/pyodbc25/lib/python2.5/site-packages/ 
SQLAlchemy-0.5.3-py2.5.egg/sqlalchemy/engine/base.py", line 1129, in  
create
     self._run_visitor(self.dialect.schemagenerator, entity,  
connection=connection, **kwargs)
   File "/Users/singletoned/.envs/pyodbc25/lib/python2.5/site-packages/ 
SQLAlchemy-0.5.3-py2.5.egg/sqlalchemy/engine/base.py", line 1158, in  
_run_visitor
     visitorcallable(self.dialect, conn, **kwargs).traverse(element)
   File "/Users/singletoned/.envs/pyodbc25/lib/python2.5/site-packages/ 
SQLAlchemy-0.5.3-py2.5.egg/sqlalchemy/sql/visitors.py", line 89, in  
traverse
     return traverse(obj, self.__traverse_options__, self._visitor_dict)
   File "/Users/singletoned/.envs/pyodbc25/lib/python2.5/site-packages/ 
SQLAlchemy-0.5.3-py2.5.egg/sqlalchemy/sql/visitors.py", line 200, in  
traverse
     return traverse_using(iterate(obj, opts), obj, visitors)
   File "/Users/singletoned/.envs/pyodbc25/lib/python2.5/site-packages/ 
SQLAlchemy-0.5.3-py2.5.egg/sqlalchemy/sql/visitors.py", line 194, in  
traverse_using
     meth(target)
   File "/Users/singletoned/.envs/pyodbc25/lib/python2.5/site-packages/ 
SQLAlchemy-0.5.3-py2.5.egg/sqlalchemy/sql/compiler.py", line 807, in  
visit_metadata
     collection = [t for t in sql_util.sort_tables(tables) if  
self._can_create(t)]
   File "/Users/singletoned/.envs/pyodbc25/lib/python2.5/site-packages/ 
SQLAlchemy-0.5.3-py2.5.egg/sqlalchemy/sql/compiler.py", line 800, in  
_can_create
     return not self.checkfirst or not  
self.dialect.has_table(self.connection, table.name, schema=table.schema)
   File "/Users/singletoned/.envs/pyodbc25/lib/python2.5/site-packages/ 
SQLAlchemy-0.5.3-py2.5.egg/sqlalchemy/databases/mssql.py", line 1105,  
in has_table
     current_schema = schema or self.get_default_schema_name(connection)
   File "<string>", line 1, in <lambda>
   File "/Users/singletoned/.envs/pyodbc25/lib/python2.5/site-packages/ 
SQLAlchemy-0.5.3-py2.5.egg/sqlalchemy/engine/base.py", line 1894, in  
decorated
     connection.info[key] = val = fn(self, connection)
   File "/Users/singletoned/.envs/pyodbc25/lib/python2.5/site-packages/ 
SQLAlchemy-0.5.3-py2.5.egg/sqlalchemy/databases/mssql.py", line 1070,  
in get_default_schema_name
     user_name = connection.scalar(sql.text(query))
   File "/Users/singletoned/.envs/pyodbc25/lib/python2.5/site-packages/ 
SQLAlchemy-0.5.3-py2.5.egg/sqlalchemy/engine/base.py", line 814, in  
scalar
     return self.execute(object, *multiparams, **params).scalar()
   File "/Users/singletoned/.envs/pyodbc25/lib/python2.5/site-packages/ 
SQLAlchemy-0.5.3-py2.5.egg/sqlalchemy/engine/base.py", line 824, in  
execute
     return Connection.executors[c](self, object, multiparams, params)
   File "/Users/singletoned/.envs/pyodbc25/lib/python2.5/site-packages/ 
SQLAlchemy-0.5.3-py2.5.egg/sqlalchemy/engine/base.py", line 874, in  
_execute_clauseelement
     return self.__execute_context(context)
   File "/Users/singletoned/.envs/pyodbc25/lib/python2.5/site-packages/ 
SQLAlchemy-0.5.3-py2.5.egg/sqlalchemy/engine/base.py", line 896, in  
__execute_context
     self._cursor_execute(context.cursor, context.statement,  
context.parameters[0], context=context)
   File "/Users/singletoned/.envs/pyodbc25/lib/python2.5/site-packages/ 
SQLAlchemy-0.5.3-py2.5.egg/sqlalchemy/engine/base.py", line 950, in  
_cursor_execute
     self._handle_dbapi_exception(e, statement, parameters, cursor,  
context)
   File "/Users/singletoned/.envs/pyodbc25/lib/python2.5/site-packages/ 
SQLAlchemy-0.5.3-py2.5.egg/sqlalchemy/engine/base.py", line 931, in  
_handle_dbapi_exception
     raise exc.DBAPIError.instance(statement, parameters, e,  
connection_invalidated=is_disconnect)
ProgrammingError: (ProgrammingError) ('42000', '[42000] [FreeTDS][SQL  
Server]Must declare the scalar variable "@u#". (137)  
(SQLExecDirectW)') u'SELECT user_name() as user_name;' []




On 27 Apr 2009, at 16:01, Tom Wood wrote:

>
> Hi all,
>
> Am having a problem with SQLAlchemy 0.5.3 and MSSQL.  Running on a
> Debian stack, using FreeTDS 0.82, pyodbc 2.1.4, Python 2.5 and
> (separately) SQL Server 2000 and SQL Server 2005.
>
> The (nose) test below fails with the exception:
>
> ProgrammingError: (ProgrammingError) ('24000', '[24000] [FreeTDS][SQL
> Server]Invalid cursor state (0) (SQLExecDirectW)') 'INSERT INTO
> activities (institution, application_id) VALUES (?, ?); select
> scope_identity()' ['UMass', 1]
>
> Complete stack can be found below.
>
> I'd love to hear from anyone running under a comparable  
> configuration--
> whether you see the same results or not! :-)
>
> FYI: The test succeeds using SQLAlchemy 0.5.0rc3, but fails with every
> subsequent release.  It also passes running against a sqllite db.
>
> Thanks very much.
>
> Tom Wood
> University of Connecticut
>
> # begin test code
>
> import sqlalchemy as sa
> from sqlalchemy import orm
> conn = 'mssql://<insert your string here>'
> engine = sa.create_engine(conn)
> metadata = sa.MetaData(bind=engine)
> applications_table = sa.Table('applications', metadata,
>                              sa.Column('id', sa.Integer,
> primary_key=True),
>                              sa.Column('last_name', sa.types.String
> (20)))
> activities_table = sa.Table('activities', metadata,
>                            sa.Column('id', sa.Integer,
> primary_key=True),
>                            sa.Column('institution', sa.types.String
> (20)),
>                            sa.Column('application_id', sa.Integer,
> sa.ForeignKey('applications.id')))
> Session = orm.sessionmaker()
>
> class Application(object):
>    def __init__(self, last_name):
>        self.last_name = last_name
>
> class Activity(object):
>    def __init__(self, institution):
>        self.institution = institution
>
> orm.mapper(Application, applications_table, properties={'activities':
> orm.relation(Activity, backref='application')})
> orm.mapper(Activity, activities_table)
>
> class Tester(object):
>    def setup(self):
>        metadata.create_all()
>        self.session = Session()
>
>    def teardown(self):
>        self.session.close()
>        metadata.drop_all()
>
>    def test_orm_relation(self):
>        app = Application(last_name='Wood')
>        act = Activity(institution='UConn')
>        act2 = Activity(institution='UMass')
>        app.activities.append(act)
>        app.activities.append(act2)
>
>        self.session.add(app)
>
>        self.session.commit()
>
>        assert act.id is not None
>        assert app.id is not None
>        assert act2.id is not None
>
>        assert act.application_id == app.id
>        assert act2.application_id == app.id
>
> # begin stack crawl
>
> ERROR: simple_test.Tester.test_orm_relation
> ----------------------------------------------------------------------
> Traceback (most recent call last):
>  File "/home/XXX/virtual_envs/py25-pylons/lib/python2.5/site-packages/
> nose-0.10.4-py2.5.egg/nose/case.py", line 182, in runTest
>    self.test(*self.arg)
>  File "/home/XXX/unicode_tests/simple_test.py", line 45, in
> test_orm_relation
>    self.session.commit()
>  File "/home/XXX/virtual_envs/py25-pylons/lib/python2.5/site-packages/
> SQLAlchemy-0.5.3-py2.5.egg/sqlalchemy/orm/session.py", line 673, in
> commit
>    self.transaction.commit()
>  File "/home/XXX/virtual_envs/py25-pylons/lib/python2.5/site-packages/
> SQLAlchemy-0.5.3-py2.5.egg/sqlalchemy/orm/session.py", line 378, in
> commit
>    self._prepare_impl()
>  File "/home/XXX/virtual_envs/py25-pylons/lib/python2.5/site-packages/
> SQLAlchemy-0.5.3-py2.5.egg/sqlalchemy/orm/session.py", line 362, in
> _prepare_impl
>    self.session.flush()
>  File "/home/XXX/virtual_envs/py25-pylons/lib/python2.5/site-packages/
> SQLAlchemy-0.5.3-py2.5.egg/sqlalchemy/orm/session.py", line 1351, in
> flush
>    self._flush(objects)
>  File "/home/XXX/virtual_envs/py25-pylons/lib/python2.5/site-packages/
> SQLAlchemy-0.5.3-py2.5.egg/sqlalchemy/orm/session.py", line 1422, in
> _flush
>    flush_context.execute()
>  File "/home/XXX/virtual_envs/py25-pylons/lib/python2.5/site-packages/
> SQLAlchemy-0.5.3-py2.5.egg/sqlalchemy/orm/unitofwork.py", line 244, in
> execute
>    UOWExecutor().execute(self, tasks)
>  File "/home/XXX/virtual_envs/py25-pylons/lib/python2.5/site-packages/
> SQLAlchemy-0.5.3-py2.5.egg/sqlalchemy/orm/unitofwork.py", line 707, in
> execute
>    self.execute_save_steps(trans, task)
>  File "/home/XXX/virtual_envs/py25-pylons/lib/python2.5/site-packages/
> SQLAlchemy-0.5.3-py2.5.egg/sqlalchemy/orm/unitofwork.py", line 722, in
> execute_save_steps
>    self.save_objects(trans, task)
>  File "/home/XXX/virtual_envs/py25-pylons/lib/python2.5/site-packages/
> SQLAlchemy-0.5.3-py2.5.egg/sqlalchemy/orm/unitofwork.py", line 713, in
> save_objects
>    task.mapper._save_obj(task.polymorphic_tosave_objects, trans)
>  File "/home/XXX/virtual_envs/py25-pylons/lib/python2.5/site-packages/
> SQLAlchemy-0.5.3-py2.5.egg/sqlalchemy/orm/mapper.py", line 1347, in
> _save_obj
>    c = connection.execute(statement.values(value_params), params)
>  File "/home/XXX/virtual_envs/py25-pylons/lib/python2.5/site-packages/
> SQLAlchemy-0.5.3-py2.5.egg/sqlalchemy/engine/base.py", line 824, in
> execute
>    return Connection.executors[c](self, object, multiparams, params)
>  File "/home/XXX/virtual_envs/py25-pylons/lib/python2.5/site-packages/
> SQLAlchemy-0.5.3-py2.5.egg/sqlalchemy/engine/base.py", line 874, in
> _execute_clauseelement
>    return self.__execute_context(context)
>  File "/home/XXX/virtual_envs/py25-pylons/lib/python2.5/site-packages/
> SQLAlchemy-0.5.3-py2.5.egg/sqlalchemy/engine/base.py", line 896, in
> __execute_context
>    self._cursor_execute(context.cursor, context.statement,
> context.parameters[0], context=context)
>  File "/home/XXX/virtual_envs/py25-pylons/lib/python2.5/site-packages/
> SQLAlchemy-0.5.3-py2.5.egg/sqlalchemy/engine/base.py", line 950, in
> _cursor_execute
>    self._handle_dbapi_exception(e, statement, parameters, cursor,
> context)
>  File "/home/XXX/virtual_envs/py25-pylons/lib/python2.5/site-packages/
> SQLAlchemy-0.5.3-py2.5.egg/sqlalchemy/engine/base.py", line 931, in
> _handle_dbapi_exception
>    raise exc.DBAPIError.instance(statement, parameters, e,
> connection_invalidated=is_disconnect)
> ProgrammingError: (ProgrammingError) ('24000', '[24000] [FreeTDS][SQL
> Server]Invalid cursor state (0) (SQLExecDirectW)') 'INSERT INTO
> activities (institution, application_id) VALUES (?, ?); select
> scope_identity()' ['UMass', 1]
>
> >


--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to