Sqlalchemy添加不需要的列以在添加外键表时进行查询

时间:2011-03-14 12:21:19

标签: python sqlalchemy

在Sqlalchemy查询中,您可以选择以下特定行:

q = session.query(Equipment.name)

这将为每一行返回一列。您可以从模型中添加更多列描述符。在这种情况下,len(q.column_descriptions)的值为1。

但是,只要添加一个作为外键的列,您就会突然获得该表的所有列,即使我没有要求它们。

q = dbsession.query(models.Equipment.name, models.Equipment.model)

这应该是两列,但现在len(q.column_descriptions)是15(对于这个表,所有这些都加上了addidtional)。

查询(q.statement)最终看起来像这样:

SELECT public.equipment.name, public.equipment.id, public.equipment.model_id, public.equipment.serno, public.equipment.location_id, public.equipment.sublocation, public.equipment.addeddate, public.equipment.comments, public.equipment.language_id, public.equipment.owner_id, public.equipment.vendor_id, public.equipment.account_id, public.equipment.parent_id, public.equipment.active 
FROM public.equipment

我认为这是Sqlalchemy中的一个错误,但也许我做错了什么,这里有人可能知道它是什么。

1 个答案:

答案 0 :(得分:3)

“name”是一列。 “模型”不是 - 它是一种关系()(基于上面观察到的行为)。关系的当前默认值__clause_element__()是完整表,这就是所有列都吐出的原因。正如你在机票#1328中所提到的那样,这是相关的,但是提议是你要回来('name',SomeModelObject),所以那里也没有外键列。 “外键”和“关系”之间的区别在SQLAlchemy中是不同的,与其他可能隐藏“外键”列存在这一事实的ORM工具相反。

要仅查询FK列,您需要说查询(Equipment.name,Equipment.model_id),或者引用“model”的外键列的名称。如果您正在使用Elixir,那么您可能需要深入了解他们的文档以查看他们使用的名称。