On Dec 15, 2011, at 10:15 PM, Jackson, Cameron wrote:

> I was just having a problem with a one-to-many relationship array coming out 
> in the wrong order. Looking here,  It wasn't too hard to figure out that I 
> needed to do:
>  
>     myFoos = relationship(Foo, order_by = Foo.id)
>  
> I was a little surprised though that this isn't the default behaviour. Going 
> by the results that I was getting before I fixed the problem, it looked like 
> the default was in order from least to most recently modified.
>  
> So I'd like to suggest that the default beahviour be to order the array by 
> id, when there is one.

Do you actually mean the string name "id" ?   Or at least the primary key of 
the related table ?   Complicating factors here include if primary key is 
composite, if the key is against a value with varied collation behaviors like a 
unicode string,  if the association is many-to-many (and thus a PK is present 
on the association table), or if sets or dicts, which are unordered, are used, 
not to mention custom collections where SQLA can't make a decision 
automatically.

> That said, I'm sure it would be doable. I think it would be a good 
> improvement, although if it's going to be harder than I realise, it might not 
> be worth it, given that it's so easy to just do it yourself manually.


> 

It's actually not hard at all but we removed default order_bys in version 0.5 
(see implicit order by removed: 
http://www.sqlalchemy.org/trac/wiki/05Migration#ObjectRelationalMapping)   They 
introduce performance issues, complicate queries, and introduce occasional 
configurational difficulties,  and we'd prefer users to choose that they want a 
particular collection to be ordered, and to have a more streamlined and simple 
behavior in the absence of this choice, not to mention it simplifies various 
components within the internals, which are in a constant battle to remain as 
simple as possible (which is still not very simple).   SQLAlchemy overall tries 
as hard as possible to not assume anything about the design of a schema or what 
kinds of queries are most appropriate.   The Python philosophy of "explicit is 
better than implicit" is in full force here !

Note Hibernate also has no order-by on collections either unless specified: 
http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/collections.html#d0e11300

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