Thanks, Michael.
I've just tried your example with column_property, everything works
fine, except one thing:
Does column_property hides the properties it relies on?
So, once I added full_name, last_name and first_name disappeared, is
it possible to have them existing along with full_name?
Alex
On 26 сент, 20:19, Michael Bayer <[EMAIL PROTECTED]> wrote:
> Using comparable property as a selected element in SQL is a use case
> which hasn't been addressed as of yet - the main usage was so far just
> for producing WHERE/ORDER BY/etc. expressions. In particular, the
> comparable property doesn't have any query setup capabilities (i.e.
> where it puts itself into a SQL expression as a column to be loaded)
> nor any ability to receive result rows in an ORM entity loading
> context. This example though is just a column loading context.
>
> So for the exact thing you're trying to do, it would probably work if
> you changed your __clause_element__ method to return a concatenation,
> since column elements within sess.query(X) are expected to be scalar
> ColumnElement objects:
>
> def __clause_element__(self):
> r = None
> for col in self.prop.descriptor.columns:
> if r is None:
> r = col
> else:
> r = r + text("' '") + col
>
> But really, if you're using comparable property as a loader, I
> wouldn't use comparable property anyway. It's much easier to achieve
> as a regular column_property, which has full blown ORM capabilities,
> meaning that it works as an entity attribute loader as well:
>
> mapper(MyClass, mytable, properties ={
> 'full_name':column_property(mytable.c.first_name + text("' '") +
> mytable.c.last_name)
>
> })
>
> The comparison generated by the above property would look like:
>
> WHERE table.firstname || ' ' || table.lastname = ?
>
> If you wanted to generate the criterion using AND the way your custom
> prop comparator does, you can plug your comparator in using
> comparator_factory - this option is available in rc1 but has not yet
> been documented (its a TODO for the 0.5.0 milestone):
>
> mapper(MyClass, mytable, properties ={
> 'full_name':column_property(mytable.c.first_name + text("' '") +
> mytable.c.last_name, comparator_factory =
> JoinedValuesProperty.Comparator)
>
> })
>
> You still would want your __clause_element__ to return the SQL
> concatenation expression.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"sqlalchemy" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/sqlalchemy?hl=en
-~----------~----~----~----~------~----~------~--~---