У меня есть эти две таблицы:Невозможно удалить мои записи базы данных
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
. Я обратился к этому, сообщения журнала показывают, что нет соответствующих записей. –