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 [email protected]
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
-~----------~----~----~----~------~----~------~--~---