Luc*_*mos 6 python sqlalchemy flask python-2.7 flask-sqlalchemy
我Userownedshare
和Share
表之间有多对一的关系.
当我Userownedshare
从数据库中删除一个条目时,我收到以下错误:AssertionError: Dependency rule tried to blank-out primary key column 'share.ticker'
这是有道理的,因为ticker
Userownedshare中的字段是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])
Run Code Online (Sandbox Code Playgroud)
好的,所以经过一些试验和错误后,我解决了。我需要增加课堂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")
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2794 次 |
最近记录: |