you've removed the "save-update" cascade which is why Specialism doesn't get into the Session. the warning there is a new thing to give you a heads up on that fact (I get it for the "add" message). cascade should be "all, delete, delete-orphan" here.
On Nov 1, 2011, at 11:39 AM, Wichert Akkerman wrote: > I am fighting a bit of an odd issue (using SQLAlchemy 0.7.3). I have an > account class, where each account has a list of strings managed via an > association proxy. For a reason I can't seem to find the values are not > persisted. The test case below demonstrates this: SQLAlchemy prints a "Object > of type <Specialism> not in session, delete operation along > 'Account._specialism' will not proceed" error and the first assert fails. > Strangely enough if I remove the cascade on the _specialism relationship > adding items does work correctly, but trying to remove them fails with a > "Dependency rule tried to blank-out primary key column > 'specialism.account_id'" error (which is expected). > > > from sqlalchemy import create_engine > from sqlalchemy import orm > from sqlalchemy import schema > from sqlalchemy import types > from sqlalchemy.ext.associationproxy import association_proxy > from sqlalchemy.ext.declarative import declarative_base > > > engine = create_engine('sqlite:///') > metadata = schema.MetaData() > BaseObject = declarative_base(metadata=metadata) > Session = orm.sessionmaker(bind=engine) > > > class Specialism(BaseObject): > __tablename__ = 'specialism' > > account_id = schema.Column(types.Integer(), > schema.ForeignKey('account.id', > onupdate='CASCADE', ondelete='CASCADE'), > primary_key=True) > type = schema.Column(types.String(16), primary_key=True) > > def __init__(self, type): > self.type = type > > > class Account(BaseObject): > __tablename__ = 'account' > > id = schema.Column(types.Integer(), > schema.Sequence('account_id_seq', optional=True), > primary_key=True, autoincrement=True) > > _specialism = orm.relationship(Specialism, > cascade='delete, delete-orphan') > #: List of :term:`specialisms<article specialism>` this account is > #: authorized for. > specialisms = association_proxy('_specialism', 'type') > > > metadata.create_all(engine) > session = Session() > > account = Account() > session.add(account) > account.specialisms = ['foo', 'bar'] > assert session.query(Specialism).count() == 2 > session.flush() > account.specialisms = ['buz'] > session.flush() > assert session.query(Specialism).count() == 1 > > > -- > 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 > sqlalchemy+unsubscr...@googlegroups.com. > For more options, visit this group at > http://groups.google.com/group/sqlalchemy?hl=en. > -- 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 sqlalchemy+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en.