sql >> Database >  >> RDS >> Mysql

SQLAlchemy DELETE Fout veroorzaakt door een zowel luie belasting als een dynamische versie van dezelfde relatie

zowel de Group.users als de Group.users_dynamic relaties proberen het feit te verzoenen dat de groep wordt verwijderd, samen met het kunnen beheren van de User() objecten waarnaar ze verwijzen; één relatie slaagt terwijl de tweede mislukt, omdat de rijen in de associatietabel al waren verwijderd. De eenvoudigste oplossing is om op één na alle identieke relaties als alleen-lezen te markeren:

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')

als je nog steeds wilt dat beide relaties een zekere mate van mutaties afhandelen, moet je dit voorzichtig doen, aangezien SQLAlchemy niet weet hoe wijzigingen in twee relaties tegelijkertijd moeten worden gecoördineerd, dus conflicten zoals deze kunnen blijven bestaan gebeuren (zoals dubbele invoegingen, enz.) als u equivalente mutaties maakt op beide relaties. Om het "verwijderen"-probleem zelf op te lossen, kunt u ook proberen Group.users_dynamic in te stellen op 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. Ondersteuning voor externe sleutelbeperking in Rails

  2. Hoe de bovenliggende tabel, referentietabel, naam van de externe sleutelbeperking en kolommen in SQL Server te krijgen - SQL Server / TSQL-zelfstudie, deel 71

  3. Doorzoek alle tabellen, alle kolommen voor een specifieke waarde SQL Server

  4. Een relatie maken in MySQL Workbench