`idn` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL, # название
`parent` int(11) DEFAULT NULL, # id родителя
`idn` int(11) NOT NULL AUTO_INCREMENT,
`idcat` int(11) DEFAULT NULL, # id категории
Мне нужно выбрать из таблицы1 все подкатегории определенной категории (сейчас там два уровня вложенности, врядли будет больше) и связанные с ними записи из таблицы2. В некоторых категориях связей с таблицей2 нет.
class Category(Base):
__tablename__ = 'category'
idn = Column(INTEGER(11), primary_key=True)
name = Column(VARCHAR(255))
cparent = Column(INTEGER(11), ForeignKey('category.idn'))
children = relationship('Category',
# cascade deletions
cascade="all",
# many to one + adjacency list - remote_side
# is required to reference the 'remote'
# column in the join condition.
backref=backref("parent", remote_side='category.idn'),
# children will be represented as a dictionary
# on the "name" attribute.
collection_class=attribute_mapped_collection('name'),
lazy="joined",
join_depth=3,
)
product = relationship('Product',
collection_class=list,
backref=backref("category", remote_side='category.idn'),
lazy="joined",
join_depth=3, # так как продукты у меня связаны только с третьим уровнем.
)
def __init__(self, name, parent=None):
self.name = name
self.parent = parent
class Product(Base):
__tablename__ = 'product'
idn = Column(INTEGER(11), primary_key=True)
idcat = Column(INTEGER(11), ForeignKey('category.idn'))
cat = relationship("Category")
data = Column(VARCHAR(255))
root_node = session.query( Category).filter( Category.name == root_node_name).first()