我在Userownedshare
表和Share
表之间有多对一的关系。
当我从数据库中删除Userownedshare
条目时,出现以下错误:AssertionError: Dependency rule tried to blank-out primary key column 'share.ticker'
这是有道理的,因为Userownedshare中的ticker
字段是Share
表中的外键。但是,我无法解决如何解决此错误。我认为我想在Share
条目孤立时设置级联删除,但我无法弄清楚如何执行此操作,我已阅读文档但我最终会遇到不同类型的错误,所以我想我我错过了一些微不足道的事。
希望有人可以帮忙,谢谢!
这是我的代码:
class Userownedshare(db.Model):
id = db.Column(db.Integer, primary_key=True)
ticker = db.Column(db.String(20), db.ForeignKey('share.ticker'))
user = db.Column(db.String, db.ForeignKey('user.username'))
quantity = db.Column(db.Integer, nullable=False)
dividends = db.Column(db.Float, server_default="0.0")
triggerlevel = db.Column(db.Integer)
smsalert = db.Column(db.Boolean)
emailalert = db.Column(db.Boolean)
portfolioid = db.Column(db.String(50))
name = db.relationship('Share', backref='userownedshare' , foreign_keys=[ticker])
class Share(db.Model):
id = db.Column(db.Integer)
name = db.Column(db.String(50), nullable=False)
ticker = db.Column(db.String(50), db.ForeignKey('userownedshare.ticker'), primary_key=True)
tickermatch = db.relationship('Userownedshare', backref='share', foreign_keys=[ticker])
答案 0 :(得分:3)
好的,经过一些试验和错误后我才解决了。
我需要将cascade="all, delete-orphan",
添加到tickermatch
类中的Share
关系。
但我还需要将lazy="joined"
添加到name
类中的Userownedshare
关系
class Userownedshare(db.Model):
id = db.Column(db.Integer, primary_key=True)
ticker = db.Column(db.String(20), db.ForeignKey('share.ticker'))
user = db.Column(db.String, db.ForeignKey('user.username'))
quantity = db.Column(db.Integer, nullable=False)
dividends = db.Column(db.Float, server_default="0.0")
triggerlevel = db.Column(db.Integer)
smsalert = db.Column(db.Boolean)
emailalert = db.Column(db.Boolean)
portfolioid = db.Column(db.String(50))
name = db.relationship('Share', backref='userownedshare', foreign_keys=[ticker], lazy="joined")
class Share(db.Model):
id = db.Column(db.Integer)
name = db.Column(db.String(50), nullable=False)
ticker = db.Column(db.String(50), db.ForeignKey('userownedshare.ticker'), primary_key=True)
tickermatch = db.relationship('Userownedshare', backref='share', cascade="all, delete-orphan", lazy="joined")