On Monday, 29 July 2013 20:48:57 UTC-4, Matthew Pounsett wrote:
>
> I think I understand the mechanism here... except that since this isn't a 
> real type (there's no data store behind this) is process_bind_param() 
> useful at all?
>

To answer my own question... yes, of course it does because it needs to 
convert to the database (or hybrid property) type in order to run the query 
in the first place.

I wound up with this, which works perfectly:

class TimedeltaType(types.TypeDecorator):
    impl = types.Integer

    def process_bind_param(self, value, dialect):
        return value.total_seconds()

    def process_result_value(self, value, dialect):
        return timedelta(seconds=value)

And later...

    @hybrid_property
    def duration(self):
        if self.finish:
            return self.finish - self.start
        else:
            return timedelta(0)

 


    @duration.expression
    def duration(cls):
        return type_coerce(
                func.strftime('%s', func.coalesce(cls.finish, cls.start)) -
                func.strftime('%s', cls.start),
                TimedeltaType
               )



Thanks again for the help!

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to