Il modello User
ha una relazione con il modello Address
. Ho specificato che la relazione dovrebbe sovrapporre l'operazione di cancellazione. Tuttavia, quando interrogo ed elimini un utente, ottengo un errore nel fatto che la riga di indirizzo è ancora referenziata. Come posso cancellare l'utente e gli indirizzi?SQLAlchemy: eliminazione non in cascata
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
addresses = db.relationship('Address', cascade='all,delete', backref='user')
class Address(db.Model):
id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer, db.ForeignKey(User.id))
db.session.query(User).filter(User.my_id==1).delete()
IntegrityError: (IntegrityError) update or delete on table "user" violates foreign key constraint "addresses_user_id_fkey" on table "address"
DETAIL: Key (my_id)=(1) is still referenced from table "address".
'DELETE FROM "user" WHERE "user".id = %(id_1)s' {'id_1': 1}
Grazie mille segno. Perché il primo metodo funzioni, quali cambiamenti dovrei fare? – AndroidDev
@BadLuckBrian: dipende dal database che si sta utilizzando. Leggi la documentazione a cui mi sono collegato alla fine della mia domanda per maggiori informazioni. Inoltre, leggi la documentazione per il tuo database. –
Sto usando la posta su Heroku. Ho aggiunto l'opzione cascade alla colonna Chiave Foregien nelle tabelle degli indirizzi. Forse Flask-Migrate potrebbe non aver notato che questo vincolo è stato aggiunto? Potrebbe essere stato possibile? – AndroidDev