-
-
Notifications
You must be signed in to change notification settings - Fork 1.6k
Closed
Labels
bugSomething isn't workingSomething isn't working
Description
Migrated issue, originally created by Martin Uhrin (@muhrin)
The final assert here fails because session.query([model]).delete doesn't seem to cascade while deleting the object directly has the expected behaviour.
There is a TODO on line 3044 of query.py so I guess this is a known problem.
from sqlalchemy import Column, Integer, String, ForeignKey, Boolean
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship, backref
from sqlalchemy.orm import sessionmaker
def create_bob(sess):
bob = User(id=1)
bob.addresses.append(Address())
sess.add(bob)
sess.commit()
return bob
Base = declarative_base()
engine = create_engine('sqlite:///:memory:', echo=True)
Session = sessionmaker(bind=engine)
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
class Address(Base):
__tablename__ = 'addresses'
id = Column(Integer, primary_key=True)
user_id = Column(Integer, ForeignKey('users.id'))
user = relationship("User", backref=backref("addresses", cascade='all'))
Base.metadata.create_all(engine)
sess = Session()
bob = create_bob(sess)
assert sess.query(User).count() == 1
assert sess.query(Address).count() == 1
sess.delete(bob)
sess.commit()
assert sess.query(User).count() == 0
assert sess.query(Address).count() == 0
bob = create_bob(sess)
assert sess.query(User).count() == 1
assert sess.query(Address).count() == 1
sess.query(User).delete()
sess.commit()
assert sess.query(User).count() == 0
assert sess.query(Address).count() == 0
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't working