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