如何处理sqlalchemy with_entities返回重复项

时间:2016-06-24 00:08:27

标签: sqlalchemy flask-sqlalchemy

(使用flask-sqlalchemy)

我有一个具有多对多关系的模型。

class House(db.Model):
    __tablename__ = 'houses'

    id = db.Column(db.Integer, primary_key=True)
    start_date db.Column(db.DateTime(timezone=True))
    tags = db.relationship('Tag', secondary=houses_tags, lazy='joined')

如果我只是进行常规查询

results = House.query\
               .join(House.tags)\
               .filter(...)\
               .order_by(...)\
               .paginate(...)

我找回了一套独特的房屋,其房屋标签属性填充正确。

但是,我还需要查询额外的信息,其中一些会影响结果的排序:

results = House.query\
               .join(House.tags)\
               .with_entities(
                   House,
                   db.func.earth_distance(
                   db.func.ll_to_earth(latitude, longitude), House.earth_location).label('distance_from_current_loc'),
                   db.case(
                     [
                       (House.start_date > time_now, House.start_date)
                     ],
                     else_=user_datetime_now
                   ).label('virtual_start_time')
               )
               .order_by(db.column('virtual_start_time').asc())\
               .order_by(db.column('distance_from_current_loc').asc())\
               .paginate(page, page_fetch_size, False)

问题是,在使用with_entities()时,我会为House的每个Tag获取House的重复结果行 - 实际上是&{1}} #39;确切地说SQL结果行是什么。每个House都使用Tag正确填充,但我显然不想要重复的行。

有没有办法使用with_entities()并保留House的行唯一性?

如果没有,那么在不破坏分页的情况下过滤掉这些重复项的最佳方法是什么?

谢谢!

0 个答案:

没有答案