我目前正在使用SQLAlchemy
query
我的数据库:
returnedOrders = session.query(ORDER).join(RESTAURANT,
and_(ORDER.RESTAURANTSID==RESTAURANT.RESTAURANTSID))\
.filter(ORDER.RESTAURANTSID==restaurantID)\
.order_by(sortOrders(sort_method))\
.all()
def sortOrders(sort_method):
# Date in ascending order
if sort_method == 'date':
return ORDER.ORDERSDATE
# Date in descending order
elif sort_method == '-date':
return desc(ORDER.ORDERSDATE)
# Restaurant then Cost in ascending order
elif sort_method == 'restaurant,cost':
return RESTAURANT.RESTAURANTSNAME, ORDER.ORDERSCOST(???? Error -
SQL expression object or string expected.)
# Restaurant in ascending order then Cost in descending order
elif sort_method == 'restaurant,-cost':
return ???
这似乎适用于只涉及一个queries
的{{1}}。我现在正在尝试弄清楚如何为最后两个column
语句执行此操作,但似乎无法使if
正确。
这甚至可能吗?
对此的任何帮助将不胜感激。
答案 0 :(得分:0)
目前无效,因为order_by
不适用于tuple
个实例。要解决此问题,您需要展开 order_by(...)
的参数。一种方法是始终扩展(使用* [star])并始终返回元组:
returnedOrders = (session
.query(ORDER)
.join(RESTAURANT, and_(ORDER.RESTAURANTSID==RESTAURANT.RESTAURANTSID))
.filter(ORDER.RESTAURANTSID==restaurantID)
.order_by(*sortOrders(sort_method)) # expand tuples
.all()
)
def sortOrders(sort_method):
if sort_method == 'date':
return (ORDER.ORDERSDATE,) # @new: return tuple
elif sort_method == '-date':
return (ORDER.ORDERSDATE.desc(),) # @new: return tuple
elif sort_method == 'restaurant,cost':
return (
RESTAURANT.RESTAURANTSNAME,
ORDER.ORDERSCOST,
)
elif sort_method == 'restaurant,-cost':
return (
RESTAURANT.RESTAURANTSNAME,
ORDER.ORDERSCOST.desc(),
)
else:
assert False, "Unexpected sort method {}".format(sort_method)