I am using svn update from today..
I am testing with Firebird engine, which I realize may be busted.
However I just took a look at the MS-SQL engine and it does the same thing.
I have a table with a compound key, like this:
Tcontact = Table('contact',
Column('system_id',
Integer,
primary_key=True,
nullable=False,
),
Column('id',
Integer,
Sequence("contact_id", optional=True),
primary_key=True,
nullable=False,
),
Column('first_name',
String(16),
nullable=False,
),
<snip>
class contact(object):
pass
assign_mapper(contact, Tcontact)
I use global_connect to connect to a firebird database, and just for
giggles try
contact.get(1,1)
I expect a database sql error, because there aren't any records in the
contact table. Instead I get a traceback:
>>> contact.get(1,1)
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "e:\prj\sqlalchemy\lib\sqlalchemy\mapping\mapper.py", line 247,
in get
return self.query.get(*ident, **kwargs)
File "e:\prj\sqlalchemy\lib\sqlalchemy\mapping\query.py", line 43, in get
return self._get(key, ident, **kwargs)
File "e:\prj\sqlalchemy\lib\sqlalchemy\mapping\query.py", line 205,
in _get
return self._select_statement(statement, params=params,
populate_existing=re
load)[0]
File "e:\prj\sqlalchemy\lib\sqlalchemy\mapping\query.py", line 213,
in _select
_statement
return self.instances(statement.execute(**params), **kwargs)
File "e:\prj\sqlalchemy\lib\sqlalchemy\sql.py", line 473, in execute
return self.using(self.engine).execute(*multiparams, **params)
File "e:\prj\sqlalchemy\lib\sqlalchemy\sql.py", line 378, in execute
return self.compile(*multiparams, **params).execute(*multiparams,
**params)
File "e:\prj\sqlalchemy\lib\sqlalchemy\sql.py", line 386, in compile
compiler = self.engine.compiler(self.clauseelement, bindparams)
File "e:\prj\sqlalchemy\lib\sqlalchemy\ext\proxy.py", line 30, in
compiler
return self.get_engine().compiler(*args, **kwargs)
File "e:\prj\sqlalchemy\lib\sqlalchemy\databases\firebird.py", line
105, in co
mpiler
return FBCompiler(statement, bindparams, engine=self,
use_ansi=self._use_ans
i, **kwargs)
TypeError: __init__() got multiple values for keyword argument 'engine'
>>>
It seems that proxy.py is passing the engine parameter, but Firebird
compiler also passes it as a keyword arguement, so does the MS-SQL engine.
def compiler(self, statement, bindparams, **kwargs):
return FBCompiler(statement, bindparams, engine=self,
use_ansi=self._use_ansi, **kwargs)
Hmm, well if I print out kwargs in the compiler method, it's empty:
Ah, it seems that the positional args are out of sequence (here's a
reason why I don't use positional args)
So change firebird compile() to:
def compiler(self, statement, bindparams, **kwargs):
return FBCompiler(statement, bindparams, engine=self,
use_ansi=self._use_ansi, **kwargs)
and change FBCompiler.__init__ to be like:
def __init__(self, statement, parameters, engine, use_ansi = True,
**kwargs):
self._outertable = None
self._use_ansi = use_ansi
ansisql.ANSICompiler.__init__(self, statement, parameters,
engine, **kwargs)
(though mssql has a cleaner init.. )
But still this fails and I'm afraid I'm out of time. Guess I'll move to
ms-sql..
(I now get this error)
Traceback (most recent call last):
File "<string>", line 1, in ?
File "e:\prj\sqlalchemy\lib\sqlalchemy\mapping\mapper.py", line 247,
in get
return self.query.get(*ident, **kwargs)
File "e:\prj\sqlalchemy\lib\sqlalchemy\mapping\query.py", line 43, in get
return self._get(key, ident, **kwargs)
File "e:\prj\sqlalchemy\lib\sqlalchemy\mapping\query.py", line 205,
in _get
return self._select_statement(statement, params=params,
populate_existing=re
load)[0]
File "e:\prj\sqlalchemy\lib\sqlalchemy\mapping\query.py", line 213,
in _select
_statement
return self.instances(statement.execute(**params), **kwargs)
File "e:\prj\sqlalchemy\lib\sqlalchemy\sql.py", line 473, in execute
return self.using(self.engine).execute(*multiparams, **params)
File "e:\prj\sqlalchemy\lib\sqlalchemy\sql.py", line 378, in execute
return self.compile(*multiparams, **params).execute(*multiparams,
**params)
File "e:\prj\sqlalchemy\lib\sqlalchemy\sql.py", line 387, in compile
compiler.compile()
File "e:\prj\sqlalchemy\lib\sqlalchemy\sql.py", line 344, in compile
self.statement.accept_visitor(self)
File "e:\prj\sqlalchemy\lib\sqlalchemy\sql.py", line 1391, in
accept_visitor
visitor.visit_select(self)
File "e:\prj\sqlalchemy\lib\sqlalchemy\ansisql.py", line 304, in
visit_select
l.accept_visitor(self)
File "e:\prj\sqlalchemy\lib\sqlalchemy\sql.py", line 1049, in
accept_visitor
self.obj.accept_visitor(visitor)
File "e:\prj\sqlalchemy\lib\sqlalchemy\sql.py", line 1075, in
accept_visitor
visitor.visit_column(self)
File "e:\prj\sqlalchemy\lib\sqlalchemy\databases\firebird.py", line
200, in vi
sit_column
return ansisql.ANSICompiler.visit_column(self, column)
File "e:\prj\sqlalchemy\lib\sqlalchemy\ansisql.py", line 180, in
visit_column
self.typemap.setdefault(column.key.lower(), column.type)
AttributeError: 'FBSQLEngine' object has no attribute 'setdefault'
-------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
Sqlalchemy-users mailing list
Sqlalchemy-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sqlalchemy-users