[sqlalchemy] Re: Many to many to same table

2007-07-20 Thread Michael Bayer
yup, just spell it out

item_mapper = mapper(Item, item_table, properties=dict(
collections=relation(Item, secondary=collection_table ,lazy=True,  
primaryjoin=item_table.c.id==collection_table.c.id_coll,
secondaryjoin=item_table.c.id==collection_table.c.id_item,
backref='items')))

...

# do a more reasonable collection setup than the original test

(koen, dirk) = session.query(Item).order_by(desc 
(item_table.c.name)).all()

koen.collections.append(dirk)
assert dirk in koen.collections
assert koen in dirk.items
session.flush()
session.clear()


(koen, dirk) = session.query(Item).order_by(desc 
(item_table.c.name)).all()
assert dirk in koen.collections
assert koen in dirk.items



On Jul 20, 2007, at 4:00 PM, Koen Bok wrote:

 from sqlalchemy import *

 metadata = BoundMetaData('sqlite://')

 class Item(object):
   def __init__(self, name):
   self.name = name
   def __repr__(self):
   return '%s:%s' % (self.__class__.__name__, self.name)


 item_table = Table('item', metadata,
   Column('id', Integer, primary_key=True),
   Column('name', String(50)))

 collection_table = Table('collection', metadata,
   Column('id_coll', Integer, ForeignKey(item.id), nullable=False),
   Column('id_item', Integer, ForeignKey(item.id), nullable=False))

 item_mapper = mapper(Item, item_table, properties=dict(
   collections=relation(Item, secondary=collection_table ,lazy=True,
 backref='items')))

 metadata.create_all()

 session = create_session()

 session.save(Item('Koen Bok'))
 session.save(Item('Dirk Stoop'))

 session.flush()

 # And now we should be able to do something like this:

 items = session.query(Item).select()

 for item in items:
   for i in items:
   item.items.append(i)
   item.collections.append(i)


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



[sqlalchemy] Re: Many to many to same table

2007-07-20 Thread Koen Bok

Thanks Michael, thats just too cool!

On Jul 20, 10:35 pm, Michael Bayer [EMAIL PROTECTED] wrote:
 yup, just spell it out

 item_mapper = mapper(Item, item_table, properties=dict(
 collections=relation(Item, secondary=collection_table ,lazy=True,  
 primaryjoin=item_table.c.id==collection_table.c.id_coll,
 secondaryjoin=item_table.c.id==collection_table.c.id_item,
 backref='items')))

 ...

 # do a more reasonable collection setup than the original test

 (koen, dirk) = session.query(Item).order_by(desc
 (item_table.c.name)).all()

 koen.collections.append(dirk)
 assert dirk in koen.collections
 assert koen in dirk.items
 session.flush()
 session.clear()

 (koen, dirk) = session.query(Item).order_by(desc
 (item_table.c.name)).all()
 assert dirk in koen.collections
 assert koen in dirk.items

 On Jul 20, 2007, at 4:00 PM, Koen Bok wrote:

  from sqlalchemy import *

  metadata = BoundMetaData('sqlite://')

  class Item(object):
 def __init__(self, name):
 self.name = name
 def __repr__(self):
 return '%s:%s' % (self.__class__.__name__, self.name)

  item_table = Table('item', metadata,
 Column('id', Integer, primary_key=True),
 Column('name', String(50)))

  collection_table = Table('collection', metadata,
 Column('id_coll', Integer, ForeignKey(item.id), nullable=False),
 Column('id_item', Integer, ForeignKey(item.id), nullable=False))

  item_mapper = mapper(Item, item_table, properties=dict(
 collections=relation(Item, secondary=collection_table ,lazy=True,
  backref='items')))

  metadata.create_all()

  session = create_session()

  session.save(Item('Koen Bok'))
  session.save(Item('Dirk Stoop'))

  session.flush()

  # And now we should be able to do something like this:

  items = session.query(Item).select()

  for item in items:
 for i in items:
 item.items.append(i)
 item.collections.append(i)


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