your examples aren't complete or runnable so I don't really know what the issue 
is, although having two relationships to the same target class seems a little 
unusual and I'm not sure why you'd need that.


On Thu, Dec 17, 2020, at 6:01 PM, maqui...@gmail.com wrote:
> 
> I think I may have just found a solution? Not sure if this is correct but it 
> looks like it worked when i changed the "extra" relationship to 
> passive_deletes=True instead of cascade
> 
> class ChildClass(XPressoBase):
> __tablename__ = "child_class"
> id = Column("id", UUID(as_uuid=True), primary_key=True, default=uuid4())
> parents = relationship("ParentClass", 
> secondary="mix_parent_class_child_class", passive_deletes=True)
> children = relationship("ChildChildClass", 
> secondary="mix_child_class_child_child_class", cascade="all, delete")
> children2 = relationship("ChildChildClass", 
> secondary="mix_child_class_child_child_class", passive_deletes=True)
> On Thursday, December 17, 2020 at 5:50:06 PM UTC-5 maqui...@gmail.com wrote:
>> I have a polymorphic data model where association tables are to base classes 
>> and some relationships that link to different child classes to filter out 
>> the non-matching base classes, however these seem to result in sqlalchemy 
>> being unable to delete cascade properly
>> 
>> In a real case lets say i have
>> class Base():
>>    children = relationship("Base", secondary="mix_base_base", cascade="all, 
>> delete")
>>    someTypes = relationship("SomeType", secondary="mix_base_base", 
>> cascade="all, delete")
>>    other_types = relationship("OtherType", secondary="mix_base_base", 
>> cascade="all")
>> 
>> class SomeType(Base):
>>     parents = relationship("Base", secondary="mix_base_base", 
>> passive_deletes=True)
>> 
>> class OtherType(Base):
>>     parents = relationship("Base", secondary="mix_base_base", 
>> passive_deletes=True)
>> 
>> 
>> if I delete a base that doesn't have relationships to SomeType and 
>> OtherType, then everything works great. However once I add those extra 
>> relationships sqlalchemy no longer deletes the children relationships.  This 
>> can be overcome by using lazy="dynamic" on the relationships, but at GREAT 
>> performance cost (about 100%), which isn't good.
>> 
>> Does anyone know how to get around this without using dynamic loading? The 
>> specific relationships are important for front end pagination of data, but 
>> the performance cost is too great for the amount of data in this system to 
>> double the query times.
>> 
>> a simplified and stupid workable example where I just add a redundant 
>> children2 relationship to ChildClass, resulting in the same problem:
>> 
>> from uuid import uuid4
>> 
>> from sqlalchemy import Column
>> from sqlalchemy.dialects.postgresql.base import UUID
>> from sqlalchemy.orm import relationship
>> 
>> from webapp.database.orm.base import XPressoBase
>> 
>> class ChildClass(Base):
>> __tablename__ = "child_class"
>> id = Column("id", UUID(as_uuid=True), primary_key=True, default=uuid4())
>> parents = relationship("ParentClass", 
>> secondary="mix_parent_class_child_class", passive_deletes=True)
>> children = relationship("ChildChildClass", 
>> secondary="mix_child_class_child_child_class", cascade="all, delete")
>> children2 = relationship("ChildChildClass", 
>> secondary="mix_child_class_child_child_class", cascade="all, delete")
>> 
>> class ChildChildClass(Base):
>> __tablename__ = "child_child_class"
>> id = Column("id", UUID(as_uuid=True), primary_key=True, default=uuid4())
>> parents = relationship("ChildClass", 
>> secondary="mix_child_class_child_child_class", passive_deletes=True)
>> 
>> class ParentClass(Base):
>> __tablename__ = "parent_class"
>> id = Column("id", UUID(as_uuid=True), primary_key=True, default=uuid4())
>> children = relationship("ChildClass", 
>> secondary="mix_parent_class_child_class", cascade="all, delete")
>> from sqlalchemy.sql.schema import Table, ForeignKey, Column, UniqueConstraint
>> 
>> from webapp.database.orm.base import XPressoBase
>> 
>> mix_parent_class_child_class = Table(
>> "mix_parent_class_child_class",
>> XPressoBase.metadata,
>> Column("parent_class_id", ForeignKey("parent_class.id", ondelete="CASCADE"), 
>> nullable=False),
>> Column("child_class_id", ForeignKey("child_class.id"), nullable=False),
>> UniqueConstraint(
>> "parent_class_id", "child_class_id", name="uix_parent_class_child_class"
>> ),
>> )
>> 
>> mix_child_class_child_child_class = Table(
>> "mix_child_class_child_child_class",
>> XPressoBase.metadata,
>> Column("child_class_id", ForeignKey("child_class.id", ondelete="CASCADE"), 
>> nullable=False),
>> Column("child_child_class_id", ForeignKey("child_child_class.id"), 
>> nullable=False),
>> UniqueConstraint(
>> "child_class_id", "child_child_class_id", 
>> name="uix_child_class_child_child_class"
>> ),
>> )
>> 
> 

> -- 
> SQLAlchemy - 
> The Python SQL Toolkit and Object Relational Mapper
>  
> http://www.sqlalchemy.org/
>  
> To post example code, please provide an MCVE: Minimal, Complete, and 
> Verifiable Example. See http://stackoverflow.com/help/mcve for a full 
> description.
> --- 
> You received this message because you are subscribed to the Google Groups 
> "sqlalchemy" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to sqlalchemy+unsubscr...@googlegroups.com.
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/sqlalchemy/a172d1cf-7105-48d8-a1ea-50889fa6e5c7n%40googlegroups.com
>  
> <https://groups.google.com/d/msgid/sqlalchemy/a172d1cf-7105-48d8-a1ea-50889fa6e5c7n%40googlegroups.com?utm_medium=email&utm_source=footer>.

-- 
SQLAlchemy - 
The Python SQL Toolkit and Object Relational Mapper

http://www.sqlalchemy.org/

To post example code, please provide an MCVE: Minimal, Complete, and Verifiable 
Example.  See  http://stackoverflow.com/help/mcve for a full description.
--- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sqlalchemy/ab17a1d6-e936-4a7c-bbc9-e0459d1e6da0%40www.fastmail.com.

Reply via email to