Удаление алхимического каскада SQL - что мне не хватает? - PullRequest
0 голосов
/ 24 октября 2019

У меня есть простая установка отношений между родителем и дочерней таблицей с помощью 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Алхимей, я не думаю, что один будет работать, а другой нет. Все еще заставляет меня думать, что я что-то упускаю.

...