order_by accepts a Column object, i.e. table.c.whatever, so pass that in.

Scott wrote:
>
> Is there a way with the current iteration of SQLAlchemy to add a
> column to the association table in a many-to-many relationship with
> that column used to order the join? I looked at the order_by attribute
> of the ManyToMany() relationship definition, but it seems that this is
> expecting a string naming the column in the related entity. I'm using
> Elixir on top of alchemy, but here are my relevant class and table
> definitions:
>
> procedure_cpt_codes = Table('procedure_cpt_codes', metadata,
> autoload=True)
>
> class CptCode(Entity):
>       using_options(tablename='cpt_codes', autosetup=True)
>
>       name = Field(Unicode)
>       code = Field(Unicode)
>       description= Field(Unicode)
>
> class Procedure(Entity):
>       using_options(tablename='procedures', autosetup=True)
>
>       complications = OneToMany('Complication')
>       cpt_codes = ManyToMany(
>               'CptCode',
>               table = procedure_cpt_codes, lazy=False,
>               foreign_keys = lambda: [ procedure_cpt_codes.c.procedure_id,
> procedure_cpt_codes.c.cpt_code_id ],
>               primaryjoin = lambda: Procedure.id ==
> procedure_cpt_codes.c.procedure_id,
>               secondaryjoin = lambda: CptCode.id ==
> procedure_cpt_codes.c.cpt_code_id,
>               order_by = procedure_cpt_codes.c.cpt_codes_idx
>       )
>       procedure_date = Field(Date)
>
> I get the following exception when run as listed:
>
> Traceback (most recent call last):
>   File "/System/Library/Frameworks/Python.framework/Versions/Current/
> Extras/lib/python/PyObjC/PyObjCTools/AppHelper.py", line 235, in
> runEventLoop
>     main(argv)
>   File "/Users/tswall/Documents/workspace/Cocoa/python/Epdb/build/
> Debug/Epdb.app/Contents/Resources/MyController.py", line 15, in
> buttonPushed_
>     for instance in Patient.query.all():
>   File "/Library/Python/2.5/site-packages/Elixir-0.6.1-py2.5.egg/
> elixir/entity.py", line 641, in __get__
>     elixir.setup_all()
>   File "/Library/Python/2.5/site-packages/Elixir-0.6.1-py2.5.egg/
> elixir/__init__.py", line 145, in setup_all
>   File "/Library/Python/2.5/site-packages/Elixir-0.6.1-py2.5.egg/
> elixir/entity.py", line 816, in setup_entities
>     method()
>   File "/Library/Python/2.5/site-packages/Elixir-0.6.1-py2.5.egg/
> elixir/entity.py", line 421, in setup_properties
>     self.call_builders('create_properties')
>   File "/Library/Python/2.5/site-packages/Elixir-0.6.1-py2.5.egg/
> elixir/entity.py", line 433, in call_builders
>     getattr(builder, what)()
>   File "/Library/Python/2.5/site-packages/Elixir-0.6.1-py2.5.egg/
> elixir/relationships.py", line 417, in create_properties
>     self.target._descriptor.translate_order_by(kwargs['order_by'])
>   File "/Library/Python/2.5/site-packages/Elixir-0.6.1-py2.5.egg/
> elixir/entity.py", line 322, in translate_order_by
>     for colname in order_by:
> TypeError: 'Column' object is not iterable
>
> When I change the order_by above to
>   order_by = 'procedure_cpt_codes.c.cpt_codes_idx' #or 'cpt_codes_idx'
> I get an error that it can't find column 'cpt_codes_idx' on relation
> table 'CptCode'.
>
> Any advice would be appreciated!
> Scott
>
> >
>


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