viewonly=True should prevent object from marked as dirty

Issue #2833 resolved
Mike Bayer repo owner created an issue
from sqlalchemy import *
from sqlalchemy.orm import *
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class A(Base):
    __tablename__ = 'a'

    id = Column(Integer, primary_key=True)


class B(Base):
    __tablename__ = 'b'

    id = Column(Integer, primary_key=True)
    a_id = Column(Integer, ForeignKey('a.id'))

    a = relationship("A", backref=backref("bs", viewonly=True))

e = create_engine("sqlite://", echo=True)
Base.metadata.create_all(e)

sess = Session(e)

a, b = A(), B()
sess.add_all([b](a,))
sess.commit()

b.a = a

assert b in sess.dirty
assert a not in sess.dirty  # "a" isn't dirty here, esp. w/ viewonly

Comments (2)

  1. Log in to comment