[sqlalchemy] bug? order_by + get(some_id) results in InvalidRequestError

2008-09-06 Thread Kyle Schaffrick

On Thu, 4 Sep 2008 18:54:27 -0400
Michael Bayer [EMAIL PROTECTED] wrote:

 
 as usual, since this one might turn out to be pretty controversial,
 I welcome the list to comment on this one.   The order_by().get()
 idea does fall in the category of nonsensical as opposed to
 ambiguous , perhaps thats the distinction we'd want to go on.
 

I was thinking about pointing out that distinction myself.

get() basically turns order_by() into a no-op, but it isn't at all
*ambiguous*. I'm going to agree with the OP in that throwing the
order_by() away in this situation isn't really tantamount to guessing.

I'm on the fence about an appropriate behavior. In a statically typed
language, it's nonsensical to declare unused local variables since the
compiler optimizes them away anyhow, but it's not ambiguous either. By
this logic, perhaps the ORDER BY should be optimized away and a warning
should be issued, just as a compiler would issue warning: local
variable 'foo' is unreferenced.

On the other hand, a limit() followed by a get() *would* be ambiguous:
Some might expect it to throw away the limit and always get the item:

  q = ses.query(A).order_by([A.rank]).limit(5)
  top5, item123 = q.all(), q.get(123)

while others might expect it to apply the limit and return None if the
item was discarded by the limit, even if it actually existed:
  
  # Is item 123 in the top 5?
  ses.query(A).order_by([A.rank]).limit(5).get(123)

IMO both of these abuse the ORM, and encouraging writing a more
appropriate query would be a Good Thing.

I imagine using the ambiguous discriminator instead of nonsensical
might partition the various other query criteria a bit differently as
well, but in my present state of mental capacity, order_by() is the only
one I can think of that this applies to :)

-Kyle

--~--~-~--~~~---~--~~
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 [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en
-~--~~~~--~~--~--~---



[sqlalchemy] bug? order_by + get(some_id) results in InvalidRequestError

2008-09-04 Thread Jon

I'm using 0.4.6 but I thought I'd give 0.5b3 a try.

An existing (working) query failed with:

Query.__no_criterion() being called on a Query with existing
criterion.

I tracked that down to using order_by when building the query.
An example is below:

q = dbsess.query(Obj)
q = q.order_by(Obj.name)
instance = q.get(some_id)

Why does this happen and is it a bug?

--~--~-~--~~~---~--~~
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 [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en
-~--~~~~--~~--~--~---