Товарищи, подскажите, как с помощью sqlalchemy организовать такой функционал. Есть две таблицы: категории и под категории, во второй есть ключ на первую. Когда создается компания, она должна указывать направление деятельности, но ее деятельность, может быть гораздо уже и ограничиваться несколькими элементами из этой категории. Покажите, пример, как описать классы, и чтобы можно было получить все категории компании, категории и их под категории, а так же, чтобы по (под категориям и категориям) я мог найти все компании.
Ответ
А есть ли смысл разделять категории и подкатегории? Сделайте одну таблицу категорий, у которых есть ссылка на родительскую категорию (на себя же). Это позволит произвольную вложенность подкатегорий и уберет лишнюю сущность. Получится что-то вроде такого:
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String
from sqlalchemy import ForeignKey
from sqlalchemy.orm import relationship
Base = declarative_base()
class Company(Base):
__tablename__ = 'company'
id = Column(Integer, primary_key=True)
name = Column(String)
def __repr__(self):
return '
id = Column(Integer, primary_key=True)
name = Column(String)
parent_id = Column(Integer, ForeignKey('category.id'))
parent = relationship('Category', remote_side=id, backref='subcategories')
def __repr__(self):
return '
company_id = Column(Integer, ForeignKey('company.id'), primary_key=True)
category_id = Column(Integer, ForeignKey('category.id'), primary_key=True)
company = relationship('Company', backref='categories')
category = relationship('Category', backref='companies')
def __repr__(self):
return '
>>> c1 = Company(name='Google')
>>> c2 = Company(name='Yahoo')
>>> cat1 = Category(name='IT')
>>> cat2 = Category(name='Search engine', parent=cat1)
>>> cat1.subcategories
[
Комментариев нет:
Отправить комментарий