У меня есть простая установка отношений между родителем и дочерней таблицей с помощью SQL Alchemy (с использованием SQLite). Я пытаюсь автоматически удалить детей при удалении родителя.
Я прочитал несколько сообщений здесь и Google, но все еще в тупике, что мне не хватает.
class Portfolio(Base):
__tablename__ = 'portfolio'
id = Column(Integer, primary_key=True)
name = Column(String)
holdings = relationship("Portfolio_Holdings", cascade='all,delete')
class Portfolio_Holdings(Base):
__tablename__ = "portfolio_holdings"
id = Column(Integer, primary_key=True)
portfolio_id = Column(Integer, ForeignKey('portfolio.id'))
ticker = Column(String)
Когда я удаляюзапись в Портфолио, ничего не связанного в Портфолио Холдингс удаляется.
Создание записей:
portfolio=Portfolio()
portfolio.name = "Some Name"
tickers = ['ABCD','EFGH','JKLI']
holdings_to_db = []
for ticker in tickers:
holding=Portfolio_Holding()
holding.ticker = ticker
holdings_to_db.append(holding)
portfolio.holdings = holding_to_db
Session.merge(portfolio)
Все записи вносятся в базу данных;однако, когда я удаляю Портфолио, ничего не удаляется из Портфолио, используя следующий код:
session = Session()
session.query(Portfolio).delete()
session.commit()
Однако это работает, как кто-то указал:
portfolio = session.query(Portfolio).filter(Portfolio.id==1).one()
session.delete(portfolio)
Столь же зрелый, как SQLАлхимей, я не думаю, что один будет работать, а другой нет. Все еще заставляет меня думать, что я что-то упускаю.