私のUser
モデルはAddress
モデルとの関係を持っています。関係が削除操作をカスケードする必要があることを指定しました。しかし、ユーザーを照会して削除すると、アドレス行がまだ参照されているというエラーが表示されます。ユーザーと住所を削除するにはどうすればよいですか?SQLAlchemyの削除はカスケードしません
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}
ありがとうございます。最初の方法が機能するには、どのような変更が必要でしょうか? – AndroidDev
@BadLuckBrian:これは使用しているデータベースによって異なります。私の質問の最後に私がリンクしているドキュメントを読んでください。また、データベースのドキュメントも参照してください。 –
私はHerokuでポーズを使用しています。 AddressesテーブルのForegien Key列にカスケードオプションを追加しました。たぶんFlask-Migrateは、この制約が加えられたことに気付かなかったでしょうか?それは可能でしたか? – AndroidDev