(使用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
的行唯一性?
如果没有,那么在不破坏分页的情况下过滤掉这些重复项的最佳方法是什么?
谢谢!