Удаление списка инструментов SQLAlchemy

#python #sqlalchemy

Вопрос:

У меня есть два занятия, такие как:

 Base = declarative_base() 

class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)
    name = Column(String, nullable=False, unique = True)

class Order(Base):
    __tablename__ = 'orders'
    id = Column(Integer, primary_key=True)
    user_id = Column(Integer, ForeignKey('Users.id'))
    sent = Column(Boolean, default=False)
    
    user = relationship('User', backref=backref('orders'))

    def __init__(self, user=None, sent=False):
        self.user = user
        self.sent = sent 
 

Когда я выполняю следующий код :

 u = session.query(User)[0]
o = Order()
u.orders.append(o) 
session.commit() 
 

SqlAlachemy выдает инструкцию insert в таблице заказов. Когда я выполню :

 del u.orders[1]
session.commit() 
 

sqlalchemy выдает инструкцию update в таблице заказов, устанавливающую идентификатор пользователя равным НУЛЮ.

Мне нужно, чтобы SQLAlchemy выдал инструкцию delete, и записи исчезли из базы данных, а не просто были установлены в значение NULL. Я попытался установить аргумент ключевого слова cascade=’сохранить-обновить’ в вызове обратной ссылки, но не преуспел. Я думаю, что для этого должна быть какая-то конфигурация аргумента ключевого слова, но я пока не смог ее найти. Как я мог достичь объясненного поведения ? А именно, проблема удаления операторов в дочерних таблицах?

Комментарии:

1. Прочитайте раздел документации » Каскады «, и вам нужно добавить delete-orphan ценность в свою конфигурацию.

2. Я работал !. Я также добавил опцию удаления, как предлагает SQLAlchemy warn. Я определил: пользователь = связь («Пользователь», обратная ссылка=обратная ссылка («заказы», каскад= «сохранить-обновить, удалить-сирота, удалить»), и это работает так, как мне нужно.