On Apr 2, 2007, at 6:28 AM, Alexandre CONRAD wrote:

>
> Michael Bayer wrote:
>> use 'sites':relation(Site, backref=backref('attachments',
>> order_by=attachment_table.c.name)) for now.
>
> Ok, should I open a ticket for that ?

i dont think this is a bug.  many to many collections are going to  
try to order by the order in which the collection was created.  on  
some databases, tables have an "OID" type of concept that actually  
makes this possible with a plain two-column many-to-many table - and  
this ordering may be different than the ordering indicated for the  
mapped relationship itself.  i dont think the ordering of a  
collection can be assumed to be the same as that of the related  
mapper itself.

i think hibernate gets it even more correct - no collection has any  
ordering whatsoever unless you explicitly specify an ordering column.

>
>
>> On Mar 30, 5:50 am, Alexandre CONRAD <[EMAIL PROTECTED]> wrote:
>>
>>> Hello,
>>>
>>> I have a problem with "order_by" on a many-to-many relationship  
>>> (using
>>> assign_mapper):
>>>
>>> ------------------------------
>>> attachment_table = Table('attachments', meta,
>>>     Column('id', Integer, primary_key=True),
>>>     Column('file', Binary, nullable=False),
>>>     Column('name', Unicode(40), nullable=False),
>>>     Column('type', Unicode(30)),
>>>     Column('date', DateTime, default=datetime.now),
>>>     Column('size', Integer, nullable=False),
>>>     Column('description', Unicode(40)),
>>> )
>>>
>>> attachments_has_sites = Table('attachments_has_sites', meta,
>>>     Column('id_attachment', None, ForeignKey('attachments.id'),
>>> primary_key=True),
>>>     Column('id_site', None, ForeignKey('sites.id'),  
>>> primary_key=True),
>>> )
>>>
>>> class Attachment(object):
>>>     pass
>>>
>>> attachment_mapper = assign_mapper(ctx, Attachment, attachment_table,
>>>     properties={
>>>         'file':deferred(attachment_table.c.file),
>>>         'sites':relation(Site, backref="attachments",
>>> secondary=attachments_has_sites, cascade="save-update"),
>>>     },
>>>     order_by=attachment_table.c.name,
>>> )
>>> ------------------------------
>>>
>>> So I have a Site object where I can ask for it's attachments:
>>>
>>>   s = model.Site.get(1)
>>>   attachment_list = s.attachments
>>>
>>> But it fires the following QUERY:
>>>
>>> SELECT attachments.name AS attachments_name,  
>>> attachments.description AS
>>> attachments_description, attachments.date AS attachments_date,
>>> attachments.type AS attachments_type, attachments.id AS  
>>> attachments_id,
>>> attachments.size AS attachments_size
>>> FROM attachments, attachments_has_sites
>>> WHERE %s = attachments_has_sites.id_site AND attachments.id =
>>> attachments_has_sites.id_attachment ORDER BY
>>> attachments_has_sites.id_attachment
>>>
>>> the "ORDER BY" is computed against the weak table (secondary)
>>> "attachments_has_sites".
>>>
>>> Regards,
>>> --
>>> Alexandre CONRAD
>>
>>
>>
>>>
>>
>>
>> --------------------------------------------------------------------- 
>> ------------------------------
>> Texte inséré par Platinum 2007:
>>
>>  S'il s'agit d'un mail indésirable (SPAM), cliquez sur le lien  
>> suivant pour le reclasser : http://127.0.0.1:6083/Panda? 
>> ID=pav_32965&SPAM=true
>> --------------------------------------------------------------------- 
>> ------------------------------
>>
>>
>
> -- 
> Alexandre CONRAD
>
>
> >


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

Reply via email to