Sqlalchemy filter by field in list but keep original order?

后端 未结 4 1429
时光说笑
时光说笑 2021-02-12 22:35

I have a Shoe model like this:

class Shoe(db.Model):
id = db.Column(db.Integer, primary_key = True)
asin = db.Column(db.String(20), index = True)
4条回答
  •  没有蜡笔的小新
    2021-02-12 22:36

    If you have a reasonable small list of ids, you could just perform SQL queries on each id individually:

    [Shoe.query.filter_by(id=id).one() for id in my_list_of_ids]
    

    For a large number of ids, SQL queries will take a long time. Then you are better off with a single query and putting the values in the correct order in a second step (borrowed from how to select an object from a list of objects by its attribute in python):

    shoes = Shoe.query.filter(Shoe.id.in_(my_list_of_ids)).all()
    [next(s for s in shoes if s.id == id) for id in my_list_of_ids]
    

    This is assuming the id's are unique (which they should be in your case). The first method will raise an exception if there are multiple elements with the same id.

提交回复
热议问题