- changed status to resolved
row switch logic fails with relations
Issue #841
resolved
#!/usr/bin/env python
from sqlalchemy import *
from sqlalchemy.orm import *
e = create_engine("sqlite://", echo=True)
metadata = MetaData(e)
session = create_session()
transaction = session.create_transaction()
addresses_table = Table('Address', metadata,
Column('id', Integer, primary_key = True),
Column('street', Unicode(250)),
)
users_table = Table('users', metadata,
Column('id', Integer, primary_key = True),
Column('name', Unicode(80)),
)
mapping_table = Table('users_addresses__Address', metadata,
Column("user_id", Integer, ForeignKey("users.id")),
Column("Address_id", Integer, ForeignKey("Address.id"))
)
class Address(object):
def __repr__(self):
return unicode(self.street)
class User(object):
def __repr__(self):
return unicode(self.name)
mapper(Address, addresses_table)
mapper(User, users_table,
properties={'addresses':
relation(Address,
secondary=mapping_table,
primaryjoin=users_table.c.id==mapping_table.c.user_id,
secondaryjoin=mapping_table.c.Address_id==addresses_table.c.id)
}
)
metadata.drop_all()
metadata.create_all()
a = Address()
a.street="Wall Street"
u = User()
u.id = 1
u.name="Foo Bar"
u.addresses.append(a)
session.save(a)
session.save(u)
transaction.commit()
metadata.bind.echo = True
session = create_session()
transaction = session.create_transaction()
foo = session.query(User).filter_by(name='Foo Bar').one()
for address in foo.addresses:
foo.addresses.remove(address)
session.delete(address)
session.delete(foo)
foo = User()
session.save(foo)
foo.id = 1 # triggers row switch, above address m2m rows don't get deleted properly
foo_addr = Address()
session.save(foo_addr)
foo_addr.street = "Picadelly Circus"
foo.addresses.append(foo_addr)
transaction.commit()
Comments (2)
-
reporter -
reporter - removed milestone
Removing milestone: 0.4.xx (automated comment)
- Log in to comment
206c0b9792b02a0d77d92e679952cb2d0465cede