Найти - Пользователи
Полная версия: SQLAlchemy, фильтрация данных, получаемых по внешнему ключу
Начало » Базы данных » SQLAlchemy, фильтрация данных, получаемых по внешнему ключу
1
kawaikunee
Вот модель:
sections=sa.Table('sections',meta.metadata,
sa.Column('id',sa.types.Integer,primary_key=True),
sa.Column('parent_id',sa.types.Integer, sa.ForeignKey('sections.id')),
sa.Column('name',sa.types.String(255)),
sa.Column('active',sa.types.Boolean),
)
class Sections(object):
def __repr__(self):
return self.name
orm.mapper(
Sections,sections,
properties={
'parent':orm.relation(
Sections,remote_side=[sections.c.id], backref=orm.backref('childrens')
)
},
)
articles=sa.Table('articles',meta.metadata,
sa.Column('id',sa.types.Integer,primary_key=True,autoincrement=True),
sa.Column('section_id',sa.types.Integer, sa.ForeignKey('sections.id')),
sa.Column('name',sa.types.String(255),default=u'',nullable=False),
sa.Column('active',sa.types.Boolean,default=0,nullable=False),
)
class Articles(object):
def __repr__(self):
return self.name
orm.mapper(
Articles,articles,
properties={'section':orm.relation(Sections,backref=orm.backref('articles'))},
)
Хочу получить одну запись, из которой потом буду получать сведения по внешнему ключу.
section=Session.query(model.Sections).get(id)
Как построить запрос, чтобы section.articles были только те, где active были только True?
ofigetitelno
:)
Как вариант вместо relation использовать dynamic_loader.
В данном случае указать lazy=dynamic для backref.
Т.е. что-то вроде:
orm.mapper(
Articles,articles,
properties={'section':orm.relation(Sections,backref=orm.backref('articles', lazy='dynamic'))},
)
Теперь можно будет написать:
section.articles.filter_by(active=True).all()
или дописать к классу свойство (property) в котором это скрыть.
class Articles(object):
def __repr__(self):
return self.name
articles = property(lambda self: self._articles.filter_by(active=True).all())
orm.mapper(
Articles,articles,
properties={'section':orm.relation(Sections,backref=orm.backref('_articles', lazy='dynamic'))},
)
Как-то так…
kawaikunee
Премного благодарен. Все работает как надо!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB