Ich habe Probleme beim Löschen einer Modellinstanz aus SQLAlchemy. Ich habe vor kurzem eine zusätzliche Tabelle hinzugefügt und dieser Zusatz hat dieses Problem eingeführt. Die Tabelle, die ich hinzugefügt habe, heißt editrecords
.SQLAlchemy löschen Kaskade fehlschlägt
Die Datenbank ist MySQL mit einer InnoDB-Engine.
Modelle sind nachstehend definiert:
from sqlalchemy.ext.declarative import declarative_base
Model = declarative_base(name='Model')
class HasId(object):
@declared_attr
def id(cls):
return Column('id', Integer, Sequence('test_id_seq'), primary_key=True)
...
class TestParent(HasId, Model):
__tablename__ = 'tests'
discriminator = Column(String(50))
__mapper_args__ = {'polymorphic_on': discriminator}
...
class FooTest(TestParent):
__tablename__ = 'footests'
__mapper_args__ = {'polymorphic_identity': 'footests'}
id = Column(Integer, ForeignKey('tests.id', ondelete='CASCADE'), primary_key=True)
...
class EditRecord(Model):
__tablename__ = 'editrecords'
id = Column(Integer, Sequence('editrecord_id_seq'), primary_key=True)
test_id = Column(Integer, ForeignKey('tests.id', ondelete='CASCADE'), nullable=False)
...
Hier kann die Funktion ist, wo die Lösch
def delete_test(test_id):
test = TestParent.query.get(test_id)
db_session.delete(test)
db_session.commit()
return(jsonify({'deleted_test': test_id}))
auftritt Ich habe versucht, die ForeignKey
Eigenschaft ondelete='CASCADE'
auf die Modelle zu modifizieren und die Datenbank wieder aufzubauen, obwohl nichts ist scheint zu arbeiten. Die editrecords
Tabelle gibt mir Probleme, wenn ich versuche, einen Test zu löschen, weil es eine ForeignKey
zeigt, die auf tests
zeigt.
Die Fehlermeldung, die ich immer bin, ist unten (ausgelöst, wenn ich versuche, die Transaktion in delete_test
zu begehen)
IntegrityError: (pymysql.err.IntegrityError) (1452, u'Cannot add or update a child row: a foreign key constraint fails (`bayswater_DEV`.`editrecords`, CONSTRAINT `editrecords_ibfk_1` FOREIGN KEY (`test_id`) REFERENCES `tests` (`id`) ON DELETE CASCADE)') [SQL: u'UPDATE editrecords SET test_id=%s WHERE editrecords.id = %s'] [parameters: (None, 2)]
EDIT: für die obigen Tabellen Ergebnis SHOW CREATE TABLE <table>
Tests: http://pastebin.com/uFcEMzVZ
Fußnoten: http://pastebin.com/62uhECYn
editrecords: http://pastebin.com/3LekPywN
können Sie sich einloggen, um MySQL-Server und zeigen ausführen Erstellen Sie Tabellen für die oben genannten Tabellen und erhalten Sie das Ergebnis –
wird es helfen, das Problem zu identifizieren –
@MaheshMadushanka Ich habe die Frage bearbeitet, um diese Informationen zu enthalten –