说我有以下课程:
class Basket(db.Model):
id = Column('id', Integer, primary_key=True)
class Fruit(db.Model):
id = Column('id', Integer, primary_key=True)
basket_id = Column(Integer, ForeignKey('basket.id'))
我想对fruit
表进行查询,该表在其结果中返回一个名为in_basket
的“计算”列,如果水果的True
为basket_id
则为[1, 2, 3]
在篮子ID列表中False
和{{1}}。
有没有办法在SQLAlchemy中执行此操作?我正在使用flask-sqlalchemy和Postgres 9。
感谢。
答案 0 :(得分:1)
使用case
表达式应该是直截了当的:
class Fruit(...):
...
def is_in_basket(self, busket_list):
return self.basket_id in busket_list
def get_fruits(basket_list):
from sqlalchemy.sql.expression import case
xpr = case([(Fruit.basket_id.in_(basket_list), True),], else_ = False).label("in_basket")
qry = session.query(Fruit, xpr)
fruits = []
for fruit, in_basket in qry:
fruit.in_basket = in_basket # assign value to a Fruit property (as per comment below)
fruits.append(fruit)
return fruits
fruits = get_fruits(my_basket_list)
for f in fruits:
print f, f.in_basket, f.is_in_basket(my_basket_list)