2016-01-27 35 views
5

Mam wiele do jednego związku między tabelą Userownedshare a tabelą Share.Reguła zależności próbowała wyzerować kolumnę klucza podstawowego w SQL-Alchemy podczas próby usunięcia rekordu

Gdy usunę Userownedshare wpis z bazy danych pojawia się następujący błąd: AssertionError: Dependency rule tried to blank-out primary key column 'share.ticker'

to sens jako pole w Userownedshare ticker jest kluczem obcym w tabeli Share. Jednak nie mogę się dowiedzieć, jak naprawić ten błąd. Myślę, że chcę ustawić kaskadowe usuwanie, gdy wpis Share jest osierocony, ale nie mogę się tego dowiedzieć, przeczytałem dokumentację, ale mam różne błędy, więc myślę, że brakuje mi czegoś banalnego . Mam nadzieję, że ktoś może pomóc, dzięki!


Oto mój kod:

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

Odpowiedz

3

OK, więc po pewnym prób i błędów poradziłem sobie. Potrzebowałem dodać cascade="all, delete-orphan", do relacji tickermatch w klasie Share.

Ale Musiałem także dodać lazy="joined" do relacji name w klasie 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")