La regla de dependencia intentó borrar la columna de clave principal en SQL-Alchemy al intentar eliminar el registro

Tengo una relación de muchos a uno entre la tabla Userownedshare y la tabla Share .

Cuando Userownedshare una entrada de Userownedshare de la base de datos, Userownedshare el siguiente error: AssertionError: Dependency rule tried to blank-out primary key column 'share.ticker'

Esto tiene sentido, ya que el campo del marcador en Userownedshare es una clave externa en la tabla Share . Sin embargo no puedo averiguar cómo solucionar este error. Creo que quiero configurar una eliminación en cascada cuando una entrada de Share está huérfana, pero no puedo averiguar cómo hacerlo, he leído la documentación pero acabo con diferentes tipos de errores, así que creo que me falta algo trivial . Espero que alguien pueda ayudar, gracias!

Aquí está mi código:

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

OK, después de un poco de prueba y error lo resolví. Necesitaba agregar cascade="all, delete-orphan", a la relación tickermatch en la clase Share .

Pero también necesitaba agregar lazy="joined" a la relación de name en la clase 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")