我有這兩個表:無法刪除我的數據庫記錄
class Performance(Base):
__tablename__ = 'performances'
id_ = Column(Integer, Sequence('performance_id_seq'), primary_key=True)
competitor_id = Column(Integer, ForeignKey('competitors.id_'), index=True)
start_date = Column(DateTime, nullable=False, index=True)
end_date = Column(DateTime, nullable=False, index=True)
target = Column(Float, nullable=True)
actual = Column(Float, nullable=True)
competitor = relationship("Competitor", backref="performances")
class TargetAdjustment(Base):
__tablename__ = 'target_adjustments'
id_ = Column(Integer, Sequence('target_adjustments_id_seq'), primary_key=True)
competitor_id = Column(Integer, index=True)
start_date = Column(DateTime, nullable=False)
value = Column(Float, nullable=True)
__table_args__ = (ForeignKeyConstraint([competitor_id, start_date], [Performance.competitor_id, Performance.start_date]), {})
performance = relationship('Performance', backref=backref("adjustment", uselist=False))
Index('target_adjustment_index', TargetAdjustment.competitor_id, TargetAdjustment.start_date, unique=True)
(其中包括但這些都是我的問題關鍵的)
現在我需要從這些表中刪除記錄,但是當他們都包含我無法刪除它們的記錄!
我這樣做:
competition = competitor.competition
adjustment_query = DBSession.query(TargetAdjustment).filter(
TargetAdjustment.competitor_id == competitor.id_
).filter(
or_(
TargetAdjustment.start_date <= competition.start_date,
TargetAdjustment.start_date >= competition.end_date
)
)
# delete any extraneous adjustment data for this competitor
log.warning("before: {}".format(adjustment_query.count()))
adjustment_query.delete()
DBSession.flush()
log.warning("after: {}".format(adjustment_query.count()))
# delete any extraneous performance data for this competitor
DBSession.query(Performance).filter(
Performance.competitor_id == competitor.id_
).filter(
or_(
Performance.start_date <= competition.start_date,
Performance.end_date >= competition.end_date
)
).delete()
DBSession.flush()
當我嘗試刪除「表演」的記錄,日誌報表表明,我已刪除了相當於'target_adjustments的紀錄,
WARNI: before: 0
WARNI: after: 0
但我仍然得到這個錯誤。
"IntegrityError: (IntegrityError) (1451, 'Cannot delete or update a parent row: a foreign key constraint fails (
target_adjustments
, CONSTRAINTtarget_adjustments_ibfk_1
FOREIGN KEY (competitor_id
,start_date
) REFERENCESperformances
(competitor_id
,start_date
))') 'DELETE FROM performances WHERE performances.competitor_id = %s AND (performances.start_date <= %s OR performances.end_date >= %s)' (1128L, datetime.datetime(2016, 3, 31, 23, 0), datetime.datetime(2016, 6, 1, 23, 0))"
爲什麼我不能刪除演出記錄?
顯然MySQL認爲不然。而不是猜測,你實際上可以檢查是否有任何引用數據留在target_adjustments表中 – Shadow
我已經解決了這個問題,日誌消息顯示沒有匹配的記錄。 –