InvalidRequestError:结果集中的模糊列名'***',而请求对mysqldb有效?

Tal*_*mad 4 python mysql sqlalchemy python-2.7

我的代码如下:

s = DBSession()
r = s.query(Food, FoodCategory).filter(Food.category_id == FoodCategory.id).first()
Run Code Online (Sandbox Code Playgroud)

此查询引发异常:

sqlalchemy.exc.InvalidRequestError: Ambiguous column name 'food.category_id' in result set
Run Code Online (Sandbox Code Playgroud)

我已经在mysql db中直接尝试了查询,它可以很好地工作.我还打印sqlalchey查询.是的,有相同的标签,"food.category_id as food_category_id"和"food_category.id as food_category_id".

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

zzz*_*eek 6

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

fa = aliased(FoodCategory)
s.query(Food, fa).filter(Food.category_id == fa.id).all()
Run Code Online (Sandbox Code Playgroud)

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