I am using SqlSoup to read from an MS SQL database and I'm having some
issues building a many-to-many relation on the mapping. The database
doesn't have any foreign keys, so I'm manually specifying the join
conditions and keys.

Specifying the relation returns without exceptions, but as soon as I
query the primary object, even with something as simple as .first(),
SQLAlchemy tries to insert a row into the association table. This
seems like incorrect behavior.

db = SqlSoup(url)

# A Product has many Categories, via the ProductCategory association
table.
db.Products.relate('categories', db.Categories,
    secondary=db.ProductCategory,
    primaryjoin=db.Products.c.ManProdCode ==
db.ProductCategory.c.ManProdCode,
    secondaryjoin=db.ProductCategory.c.Category1 ==
db.Categories.c.CatCode,
    foreign_keys=[db.ProductCategory.c.ManProdCode,
                  db.ProductCategory.c.Category1])

db.Products.first() # Fails!

I am using SQLAlchemy 0.5.2 with pymssql 0.8.0 connecting through
FreeTDS 1.12 to MS SQL Server 9.0.2047. I also checked it with the svn
trunk (r5823) and the behavior is the same.

The association table is nothing special, basically:
(
    ManProdCode CHAR(5) NOT NULL,
    Category1 CHAR(2),
    Category2 CHAR(2)
)

The user I'm connecting with does not have INSERT privileges, so a
DatabaseError is raised when db.Products.first() is called and SA
tries to do the INSERT. Any idea why SA is trying to do this?

Thanks!
Scott


Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "sqlalchemy/orm/query.py", line 1219, in first
    ret = list(self[0:1])
  File "sqlalchemy/orm/query.py", line 1140, in __getitem__
    return list(res)
  File "sqlalchemy/orm/query.py", line 1279, in __iter__
    self.session._autoflush()
  File "sqlalchemy/orm/session.py", line 902, in _autoflush
    self.flush()
  File "sqlalchemy/orm/session.py", line 1347, in flush
    self._flush(objects)
  File "sqlalchemy/orm/session.py", line 1417, in _flush
    flush_context.execute()
  File "sqlalchemy/orm/unitofwork.py", line 244, in execute
    UOWExecutor().execute(self, tasks)
  File "sqlalchemy/orm/unitofwork.py", line 707, in execute
    self.execute_save_steps(trans, task)
  File "sqlalchemy/orm/unitofwork.py", line 722, in execute_save_steps
    self.save_objects(trans, task)
  File "sqlalchemy/orm/unitofwork.py", line 713, in save_objects
    task.mapper._save_obj(task.polymorphic_tosave_objects, trans)
  File "sqlalchemy/orm/mapper.py", line 1352, in _save_obj
    c = connection.execute(statement.values(value_params), params)
  File "sqlalchemy/engine/base.py", line 824, in execute
    return Connection.executors[c](self, object, multiparams, params)
  File "sqlalchemy/engine/base.py", line 874, in
_execute_clauseelement
    return self.__execute_context(context)
  File "sqlalchemy/engine/base.py", line 896, in __execute_context
    self._cursor_execute(context.cursor, context.statement,
context.parameters[0], context=context)
  File "sqlalchemy/engine/base.py", line 950, in _cursor_execute
    self._handle_dbapi_exception(e, statement, parameters, cursor,
context)
  File "sqlalchemy/engine/base.py", line 931, in
_handle_dbapi_exception
    raise exc.DBAPIError.instance(statement, parameters, e,
connection_invalidated=is_disconnect)
sqlalchemy.exc.DatabaseError: (DatabaseError) internal error: SQL
Server message 229, severity 14, state 5, line 1:
INSERT permission denied on object 'ProductCategory', database
'SomeDB', schema 'dbo'.
DB-Lib error message 229, severity 14:
General SQL Server error: Check messages from the SQL Server
 'INSERT INTO [ProductCategory] ([Category1], [Category2]) VALUES (%
(Category1)s, %(Category2)s)' {'Category1': None, 'Category2': None}

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