5

我的代码如下:

s = DBSession()
r = s.query(Food, FoodCategory).filter(Food.category_id == FoodCategory.id).first()

此查询引发异常:

sqlalchemy.exc.InvalidRequestError: Ambiguous column name 'food.category_id' in result set

我已经在mysql db中直接尝试过查询,它可以正常工作。我还打印了 sqlalchey 查询。是的,有相同的标签,“food.category_id as food_category_id”和“food_category.id as food_category_id”。

我怀疑现在这个查询对mysql有效,为什么对sqlalchemy无效

4

1 回答 1

8

SQLAlchemy 使用结果集中的列名来标识列。为避免冲突,它使用表限定名称标记结果列。在这种情况下,我收集的表格名为“food”和“food_category”,因此“food_category_id”仍然存在标签重叠。这种特定情况的解决方法是使用其中一个类的别名:

fa = aliased(FoodCategory)
s.query(Food, fa).filter(Food.category_id == fa.id).all()

编辑:这里实际上有一个从 SQLAlchemy 0.7 到 0.8 的回归。0.7 中的行为稍好一些,您不会收到错误消息,但其中一列不会被加载,除非您稍后访问它。这个问题就在这里。但是,我还想考虑在此处添加更多自动别名以克服名称冲突,这可能会很棘手。

于 2013-04-10T23:03:16.780 回答