Может быть несколько PostAlias для одного AliasLimit, и это ограничение с двумя ключами (vpost_id, alias_id), я хочу удалить PostAliases и ограниченный AliasLimit, только если он был последним связанным PostAlias:
class AliasLimit(MyModel):
__tablename__ = 'alias_limits'
__table_args__ = (
db.ForeignKeyConstraint(['alias_id', 'vpost_id'], ['post_aliases.alias_id', 'post_aliases.vpost_id'], ondelete='CASCADE', onupdate='CASCADE'),
db.Index('al_alias_idx', 'alias_id', 'vpost_id'),
)
id = db.Column(db.Integer, primary_key=True)
vpost_id = db.Column(db.Integer, nullable=False)
alias_id = db.Column(db.Integer, nullable=False)
offset = db.Column(db.Float, default=0.0)
detection_threshold = db.Column(db.Float)
warning_threshold = db.Column(db.Float)
alarm_threshold = db.Column(db.Float)
min = db.Column(db.Float)
max = db.Column(db.Float)
post_aliases = db.relationship('PostAlias',
primaryjoin='and_(AliasLimit.alias_id == PostAlias.alias_id, AliasLimit.vpost_id == PostAlias.vpost_id)', backref=db.backref('alias_limits', uselist=False), uselist=True)
class PostAlias(MyModel):
__tablename__ = 'post_aliases'
__table_args__ = (
db.Index('postalias2limit_idx', 'alias_id', 'vpost_id'),
)
id = db.Column(db.Integer, primary_key=True)
vpost_id = db.Column(db.ForeignKey('visual_posts.id', ondelete='CASCADE', onupdate='CASCADE'), nullable=False, index=True)
alias_id = db.Column(db.ForeignKey('aliases.id', ondelete='CASCADE', onupdate='CASCADE'), nullable=False)
post_id = db.Column(db.ForeignKey('posts.id', ondelete='CASCADE', onupdate='CASCADE'), nullable=False, index=True)
sensor_id = db.Column(db.ForeignKey('sensors.id', ondelete='CASCADE', onupdate='CASCADE'), nullable=False, index=True)
Я вставляю данные вот так
obj = PostAlias(vpost_id=vpost_id,
post_id=form.post.data,
sensor_id=form.sensor.data,
alias_id=form.alias.data)
db.session.add(obj)
db.session.flush()
if obj.alias_limits is None:
obj.alias_limits = AliasLimit()
db.session.commit()
при удалении PostAlias
PostAlias.query.filter_by(id=id).delete()
db.session.commit()
Linked AliasLimit каждый раз удаляется не только тогда, когда он был последним.
Если я изменяю действие ondelete, я получаю ошибку
sqlalchemy.exc.IntegrityError: (mysql.connector.errors.IntegrityError) 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails (`new`.`alias_limits`, CONSTRAINT `alias_limits_ibfk_1` FOREIGN KEY (`alias_id`, `vpost_id`) REFERENCES `post_aliases` (`alias_id`, `vpost_id`))
[SQL: DELETE FROM post_aliases WHERE post_aliases.id = %(id_1)s]
[parameters: {'id_1': 18}]
без db.ForeignKeyConstraint(['alias_id', 'vpost_id'], ['post_aliases.alias_id', 'post_aliases.vpost_id']),
я не могу определить отношения
что мне делать ??? помогите плз