yessir, when using selectables i always just use selectobj.c.colname...
i've attached a quick test case, and it throws the same error that my
live code does, so it at least proves i can break things the same way
twice :D i wouldn't be surprised if it's something easy that i'm just
doing wrong, but here it is all the same.
the test case relation for lineItems is the most bare-bones version of
the one's i've tried, but this is the first one I tried... it merely
substitutes foreign_keys for where, pre-2309, had foreignkey.
Thanks for looking!
Pete
On 3/5/07, Michael Bayer <[EMAIL PROTECTED]> wrote:
>
> please forward an runnable example test case, preferably a single
> file with <200 lines if possible.
>
> you're also making usage of Column instances directly off the
> selectable youre mapping, right ?
>
>
> On Mar 5, 2007, at 1:55 PM, Pete Taylor wrote:
>
> >
> > in regard to post-2309 revisions and the foreignkey keyword
> > deprecation...
> >
> > I know this conversation seems to have terminated as of 2/21, but it's
> > the only thread that was tracing through a problem i'm having. I'm
> > certain my problem is just one of my own lack of understanding on how
> > to use foreign_keys now, but I'll lay it out there...
> >
> > I have a legacy table that, in effect, maps to two classes. A
> > container-style class and a line items class, which for convenience
> > we'll just call Container and LineItem. A Container has_many
> > LineItem, as you might imagine. The issue, however, is that the
> > Container class is mapped against a select statement from that table,
> > not the table directly, while the LineItem class is mapped against the
> > table, largely because there's an incrementing LineItem id that's a
> > primary key on the table, but has no meaning to the Container.
> >
> > before 2309, I was able to map the lineItem relationship back to the
> > container class using an explicit primary join and a foreignkey
> > statement.
> >
> > I've read through the self-referential example rather a lot, and the
> > two mailing list threads, and have tried all the combinations and
> > permutations of primaryjoin, foreign_keys, and remote_side that I can
> > think of (obviously not all of them or it would have worked ;) ), from
> > the mappers and relationships on both classes, and I can't seem to
> > figure out the right way to make it work. I can send along a
> > simplified mockup of the relationships and what I've got currently if
> > anyone has time to take a look, but I may in fact just be heading the
> > wrong direction...
> >
> > Any help would be greatly appreciated!
> > Pete Taylor
> >
> > --
> > "All guilt is relative, loyalty counts, and never let your conscience
> > be your guide."
> > - Lucas Buck, American Gothic
> >
> > >
>
>
> >
>
--
"All guilt is relative, loyalty counts, and never let your conscience
be your guide."
- Lucas Buck, American Gothic
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---
#!/usr/bin/env python
import datetime
from sqlalchemy import *
db = create_engine('sqlite:///:memory:')
metadata = BoundMetaData(db)
class Container(object): pass
class LineItem(object): pass
items = Table('items', metadata,
Column('item_policy_num', String(10), primary_key=True, key='policyNum'),
Column('item_policy_eff_date', DateTime, primary_key=True, key='policyEffDate'),
Column('item_type', String(20), primary_key=True, key='type'),
Column('item_id', Integer, primary_key=True, key='id'),
)
container_select = select(
[items.c.policyNum, items.c.policyEffDate, items.c.type],
distinct=True,
).alias('container_select')
LineItem.mapper = mapper(LineItem, items)
Container.mapper = mapper(Container, container_select, order_by=asc(container_select.c.item_type), properties=dict(
lineItems = relation(LineItem, lazy=False, cascade='all, delete-orphan', order_by=asc(items.c.type),
primaryjoin=and_(
container_select.c.item_policy_num==items.c.policyNum,
container_select.c.item_policy_eff_date==items.c.policyEffDate,
container_select.c.item_type==items.c.type
),
foreign_keys=[
items.c.policyNum,
items.c.policyEffDate,
items.c.type,
],
)
))
def main():
metadata.create_all()
session = create_session()
con = Container()
con.policyNum = "9999999999"
con.policyEffDate = datetime.date.today()
con.type = "TESTER"
session.save(con)
for i in range(0, 10):
li = LineItem()
li.id = i
con.lineItems.append(li)
session.save(li)
session.flush()
session.clear()
con = session.query(Container).selectfirst()
print "DEBUG: con has %s line items" % len(con.lineItems)
if __name__ == "__main__":
main()