当尝试删除记录时,依赖关系规则试图清空SQLAlchemy中的主键列

2024-10-01 15:33:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我在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])

Tags: keysharedbstringmodel错误条目column
1条回答
网友
1楼 · 发布于 2024-10-01 15:33:48

好吧,经过一番反复试验,我终于解决了。 我需要将cascade="all, delete-orphan",添加到Share类中的tickermatch关系中。在

但是我还需要将lazy="joined"添加到Userownedshare类中的name关系中

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")

相关问题 更多 >

    热门问题