sql >> Databasteknik >  >> RDS >> Mysql

SQLAlchemy DELETE Fel som orsakas av att ha en både lazy-load OCH en dynamisk version av samma relation

både Group.users och Group.users_dynamic-relationerna försöker förena det faktum att gruppen tas bort tillsammans med att kunna hantera User() föremål de refererar till; en relation lyckas medan den andra misslyckas, eftersom raderna i associationstabellen redan var raderade. Den enklaste lösningen är att markera alla utom en av de identiska relationerna som viewonly:

class Group(Base):
    __tablename__ = 'groups'
    id = Column(Integer, primary_key=True)

    users = relationship('User', secondary=users_groups, lazy='select', backref='groups')
    users_dynamic = relationship('User', viewonly=True, secondary=users_groups, lazy='dynamic')

om du fortfarande vill att båda relationerna ska hantera en viss grad av mutationer, måste du göra detta försiktigt eftersom SQLAlchemy inte vet hur man koordinerar förändringar i två relationer samtidigt, så konflikter som denna kan fortsätta att hända (som dubbla insättningar, etc) om du gör motsvarande mutationer på båda relationerna. För att bara ta hand om problemet med "radera" kan du också prova att ställa in Group.users_dynamic till passive_deletes=True:

class Group(Base):
    __tablename__ = 'groups'
    id = Column(Integer, primary_key=True)

    users = relationship('User', secondary=users_groups, lazy='select', backref='groups')
    users_dynamic = relationship('User', passive_deletes=True, secondary=users_groups, lazy='dynamic')


  1. Auto_increment-värden i InnoDB?

  2. Vänster koppling PÅ-villkor OCH annan villkorssyntax i Doctrine

  3. PacketTooBigException när du kör en ekolodsanalys

  4. MySQL:hur kan jag se ALLA begränsningar på en tabell?