On Thursday, 26 May 2011 06:42:55 UTC-7, Michael Bayer wrote:
>
>
> On May 25, 2011, at 10:52 PM, Nathan Wright wrote:
>
> > Hi all,
> > 
> > I've run into an issue when mapping a deferred column_property that uses 
> a custom SQL construct. I get a KeyError: 'default' because there is no 
> compile function for the default dialect, but it seems to me that the 
> default dialect should never be used.
> > 
> > Here's an extended stack trace of what's going on, the important bit is 
> lines 78-90:
> > http://pastebin.com/0kVf9q9q
> > 
> > And here's the a simplified test case:
> > 
> > class utcnow(expression.FunctionElement):
> >     type = DateTime()
> > 
> > @compiles(utcnow, 'postgresql')
> > def pg_utcnow(element, compiler, **kw):
> >     return "TIMEZONE('utc', CURRENT_TIMESTAMP)"
> > 
> > mapper(AnyClass, any_table, properties={
> >     'timestamp': column_property(select([utcnow()]), deferred=True)
> > })
> > 
> > Session.query(AnyClass).all() 
> > 
> > 
> > For now I'm just adding a dummy @compiles(utcnow) function for the 
> default dialect, but I think this could be avoided entirely by changing the 
> NoSuchColumnError message to not cast key (ie, the select) to a string. 
> Perhaps the repr could be used instead?
>
> the __repr__() produces IMHO a less descriptive string in the case of a "no 
> such column" type of situation:
>
> sqlalchemy.exc.NoSuchColumnError: "Could not locate column in row for 
> column '<sqlalchemy.sql.expression._Label object at 0x1124490>'"
>
>
> Being able to see the expression is most meaningful.
>
> http://www.sqlalchemy.org/trac/ticket/2178 provides a patch, which is an 
> improvement on the situation.
>

Now that I see that use case, I'm in total agreement — seeing the full 
expression when working with a result proxy is very helpful.

I've attached a couple of patches to that issue which avoid compiling the 
expression for internal exceptions. I wasn't sure which approach to take, so 
each patch takes a slightly different approach and you can decide if either 
is suitable :)

Thanks,
Nathan

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