- changed status to duplicate
uow not correctly figuring out collection with single_parent=True
Issue #2314
resolved
related to #2264, even without the backref the UOW is inconsistent
from sqlalchemy.orm import unitofwork, session, mapper, dependency
from sqlalchemy.util import topological
from test.lib.util import RandomSet
topological.set = unitofwork.set = session.set = mapper.set = dependency.set = RandomSet
from sqlalchemy import *
from sqlalchemy.orm import *
engine = create_engine('sqlite:///', echo=True)
metadata = MetaData(engine)
Session = sessionmaker(bind=engine)
rocks_table = Table("rocks", metadata,
Column("id", Integer, primary_key=True),
)
bugs_table = Table("bugs", metadata,
Column("rockid", Integer, ForeignKey('rocks.id'), primary_key=True,),
Column("id", Integer, primary_key=True),
)
class Rock(object):
pass
class Bug(object):
pass
mapper(Rock, rocks_table,
properties={'bugs': relationship(Bug,
cascade='all,delete-orphan',
single_parent=True,
lazy=False,
#backref='rock'
)
})
mapper(Bug, bugs_table)
metadata.create_all()
session = Session()
rock=Rock()
rock.id = 1
bug=Bug()
bug.id = 1
rock.bugs.append(bug)
session.add(rock)
# add another rock and bug
rock=Rock()
rock.id = 2
bug=Bug()
bug.id = 2
rock.bugs.append(bug)
session.add(rock)
session.commit()
session.expunge_all()
session = Session()
currentobjects = session.query(Rock).all()
allbugs = session.query(Bug).all()
r1 = session.query(Rock).get(1)
r1.bugs = allbugs
r2 = session.query(Rock).get(2)
r2.bugs = []
# flush incorrectly DELETES bug...sometimes !
session.flush()
assert session.query(Bug).count() == 2
Comments (2)
-
reporter -
reporter - removed milestone
Removing milestone: 0.7.4 (automated comment)
- Log in to comment
the patch I'm coming up with really addresses
#2264at the same time so this is a dupe.