【问题标题】:InvalidRequestError: Ambiguous column name '***' in result set, while the request is valid to mysqldb?InvalidRequestError:结果集中的列名“***”不明确,而请求对 mysqldb 有效?
【发布时间】:2013-04-02 05:25:22
【问题描述】:

我的代码如下:

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无效

【问题讨论】:

    标签: python mysql python-2.7 sqlalchemy


    【解决方案1】:

    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 中的行为稍好一些,您不会收到错误消息,但其中一列不会被加载,除非您稍后访问它。这个问题是here。不过,我还想考虑在此处添加更多自动别名以克服名称冲突,这可能会很棘手。

    【讨论】:

    • 谢谢。我在使用 pyramid 和 zope.sqlalchemy 时发现了异常。它是在 zope.sqlalchemy=0.7.2 中提出的,但在 0.7.1 中没有提出
    猜你喜欢
    • 2021-09-07
    • 2017-10-30
    • 1970-01-01
    • 2016-11-22
    • 2014-07-10
    • 1970-01-01
    • 2011-08-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多