O SQLAlchemy do Python não limpa a tabela secundária (muitos-para-muitos

Tenho um relacionamento muitos-para-muitos entreUserareiaTasks. Quero que a "tabela secundária" (ou seja, a tabela que facilita a relação muitos-para-muitos) seja limpa quando eu excluir umTask ouUser. Como posso configurar o SQLAlchemy para isso?

Aqui está um exemplo de código python que demonstra o problema que estou tendo. Nota: Este código é totalmente independente e requer apenas osqlalchemy module. Se você copiar e colar esse código, poderá executá-lo sem efeitos colaterais e ver o mesmo comportamento. A última linha do script mostra que a linha relevante na "tabela secundária" não foi removida quando eu removi a tarefa correspondente. Todas as asserções passam neste exemplo.

from sqlalchemy import create_engine, Column, Integer, Text, Table, ForeignKey
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import Session, relationship

Model = declarative_base()

class User(Model):
    __tablename__ = 'users'
    id = Column('user_id', Integer, primary_key=True)
    email = Column('email', Text, unique=True)

    def __init__(self, email):
        self.email = email

user_tasks = Table('user_tasks', Model.metadata,
    Column('user_id', Integer, ForeignKey('users.user_id')),
    Column('task_id', Integer, ForeignKey('tasks.task_id')))

class Task(Model):
    __tablename__ = 'tasks'
    id = Column('task_id', Integer, primary_key=True)
    description = Column('description', Text)
    assigned_to = relationship('User', secondary=user_tasks, backref='tasks')

    def __init__(self, description):
        self.description = description

if __name__ == '__main__':
    engine = create_engine('sqlite:///:memory:')
    Model.metadata.create_all(engine)
    s = Session(engine)
    the_user = User('user')
    s.add(the_user)
    s.commit()
    assert s.query(User).all() == [the_user]
    user_task = Task('user_one task')
    user_task.assigned_to.append(the_user)
    s.add(user_task)
    s.commit()
    assert s.query(Task).all() == [user_task]
    assert s.query(user_tasks).all() == [(1,1)]
    s.query(Task).delete()
    s.commit()
    assert s.query(Task).all() == []
    assert s.query(User).all() == [the_user]
    assert s.query(user_tasks).all() == [(1,1)]  # I was expecting [] .

questionAnswers(4)

yourAnswerToTheQuestion