On Feb 20, 2006, at 2:54 PM, Michael Bayer wrote:
hey list -
just merged a branch that makes a large modifcation to the eager
loading methodology. this change should be an improvement in
every regard, in that it simplifies the code for eagerloading and
eliminates several user-error scenarios.
...
But, its new code, so all my claims above are subject to the word
"should", and please let me know of any strange or buggy behavior
that arises.
Here you go (convention: UpperCase=class, camelCaps=SA_table,
under_score=DB_table):
assign_mapper(Part, part)
assign_mapper(InheritedPart, inheritedPart, properties=dict(
part=sa.relation(Part, lazy=False)
))
assign_mapper(Design, design, properties=dict(
parts=sa.relation(Part, private=True, backref="design"),
inheritedParts=sa.relation(InheritedPart, private=True,
backref="design"),
))
assign_mapper(DesignType, designType, properties=dict(
designs=sa.relation(Design, private=True, backref="type"),
))
Design.mapper.add_property("type", sa.relation(DesignType,
lazy=False, backref="designs"))
Part.mapper.add_property("design", sa.relation(Design, lazy=False,
backref="parts"))
Part.mapper.add_property("designType", sa.relation(DesignType))
x = Design.get(...)
x.inheritedParts
Traceback (most recent call last):
...
File "/Users/dmiller/Code/SQLAlchemy/lib/sqlalchemy/
attributes.py", line 50, in __get__
return self.manager.get_list_attribute(obj, self.key)
File "/Users/dmiller/Code/SQLAlchemy/lib/sqlalchemy/
attributes.py", line 282, in get_list_attribute
return self.get_history(obj, key, **kwargs)
File "/Users/dmiller/Code/SQLAlchemy/lib/sqlalchemy/
attributes.py", line 335, in get_history
return self.class_managed(obj.__class__)[key](obj,
**kwargs).gethistory(passive=passive, **kwargs)
File "/Users/dmiller/Code/SQLAlchemy/lib/sqlalchemy/
attributes.py", line 201, in gethistory
value = self.callable_()
File "/Users/dmiller/Code/SQLAlchemy/lib/sqlalchemy/mapping/
properties.py", line 687, in lazyload
result = self.mapper.select(self.lazywhere, order_by=order_by,
params=params)
File "/Users/dmiller/Code/SQLAlchemy/lib/sqlalchemy/mapping/
mapper.py", line 427, in select
return self.select_whereclause(arg, **kwargs)
File "/Users/dmiller/Code/SQLAlchemy/lib/sqlalchemy/mapping/
mapper.py", line 432, in select_whereclause
return self.select_statement(statement, **params)
File "/Users/dmiller/Code/SQLAlchemy/lib/sqlalchemy/mapping/
mapper.py", line 445, in select_statement
return self.instances(statement.execute(**params))
File "/Users/dmiller/Code/SQLAlchemy/lib/sqlalchemy/sql.py", line
404, in execute
return c.execute(*multiparams, **params)
File "/Users/dmiller/Code/SQLAlchemy/lib/sqlalchemy/sql.py", line
294, in execute
return self.engine.execute_compiled(self, params)
File "/Users/dmiller/Code/SQLAlchemy/lib/sqlalchemy/engine.py",
line 554, in execute_compiled
proxy(str(compiled), parameters)
File "/Users/dmiller/Code/SQLAlchemy/lib/sqlalchemy/engine.py",
line 549, in proxy
self.execute(statement, parameters, connection=connection,
cursor=cursor, return_raw=True)
File "/Users/dmiller/Code/SQLAlchemy/lib/sqlalchemy/engine.py",
line 603, in execute
self._execute(cursor, statement, parameters)
File "/Users/dmiller/Code/SQLAlchemy/lib/sqlalchemy/engine.py",
line 618, in _execute
raise exceptions.SQLError(statement, parameters, e)
SQLError: (ProgrammingError) missing FROM-clause entry for table
"part"
# generated SQL:
SELECT ...
FROM inherited_part
LEFT OUTER JOIN part AS part_b420
ON part_b420.id = inherited_part.part_id
LEFT OUTER JOIN design AS design_4c1e
ON design_4c1e.id = part.design_id
LEFT OUTER JOIN design_type AS design_type_342b
ON design_type_342b.id = design_4c1e.design_type_id
WHERE inherited_part.design_id = %(inherited_part_design_id)s
The problem is happening in the ON clause of the JOIN with
"design" (ON design_4c1e.id = part.design_id). It's not using the
correct alias for "part" (should be using "part_b420").
Aside: in this case it's not even necessary to do the join with
"design" since the design has already been loaded (not sure if that
could be detected).
~ Daniel
-------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc. Do you grep through
log files
for problems? Stop! Download the new AJAX search engine that makes
searching your log files as easy as surfing the web. DOWNLOAD
SPLUNK!
http://sel.as-us.falkag.net/sel?
cmd=lnk&kid=103432&bid=230486&dat=121642
_______________________________________________
Sqlalchemy-users mailing list
Sqlalchemy-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sqlalchemy-users