from typing import List
from sqlalchemy import Column
from sqlalchemy import ForeignKey
from sqlalchemy import Integer
from sqlalchemy.ext.orderinglist import ordering_list
from sqlalchemy.orm import registry
from sqlalchemy.orm import relationship
mapper_registry: registry = registry()
@mapper_registry.mapped
class B:
__tablename__ = "b"
id = Column(Integer, primary_key=True)
parent_id = Column(Integer, ForeignKey("a.id"))
ordering = Column(Integer)
@mapper_registry.mapped
class C:
__tablename__ = "c"
id = Column(Integer, primary_key=True)
parent_id = Column(Integer, ForeignKey("a.id"))
ordering = Column(Integer)
@mapper_registry.mapped
class A:
__tablename__ = "a"
id = Column(Integer, primary_key=True)
bs = relationship(B, collection_class=ordering_list("ordering"))
bs_w_list: List[B] = relationship(
B, collection_class=ordering_list("ordering")
)
cs: List[B] = relationship(C, uselist=True)
cs_2: B = relationship(C, uselist=True)
b1 = B(ordering=10)
a1 = A()
a1.bs.append(b1)
a2 = A(bs_w_list=[b1])