#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. Я определил: пользователь = связь («Пользователь», обратная ссылка=обратная ссылка («заказы», каскад= «сохранить-обновить, удалить-сирота, удалить»), и это работает так, как мне нужно.