Python 加入炼金术后如何解决模棱两可的问题

Python 加入炼金术后如何解决模棱两可的问题,python,sql,sqlalchemy,Python,Sql,Sqlalchemy,当我使用语句作为连接两个表(对象)时 session.query(object, robject).filter(getattr(object.c, "hid")==getattr(robject.c,\ )).subquery() 列引用“hid”中的结果不明确,因为两个表都有hid列。 我应该如何解决这个问题 感谢对于一个子查询,您通常只想命名所需的列(因为子查询不用于加载完整对象),然后您可以使用label()进行任何其他操作: subq = sess.query(object.a,

当我使用语句作为连接两个表(对象)时

session.query(object, robject).filter(getattr(object.c, "hid")==getattr(robject.c,\
 )).subquery()
列引用“hid”中的结果不明确,因为两个表都有hid列。 我应该如何解决这个问题


感谢

对于一个子查询,您通常只想命名所需的列(因为子查询不用于加载完整对象),然后您可以使用label()进行任何其他操作:

subq = sess.query(object.a, object.b, object.hid.label('o_hid'), 
                  robject.c, robject.hid.label('r_hid')).filter(..).subquery()
然后,子查询根据标签名称命名这些列:

   query(Something).join(subq, subq.c.o_hid == Something.q).filter(subq.c.r_hid == 5)

标签会创建别名,但不会删除原始hid列。他们仍然存在冲突。我想我们需要一个像rename这样的命令来重命名列,而不是别名。在像
session.query(MyTable).join(MyTable.relation).filter\u by(dimensional\u column='something')这样的查询中,
SQL Alchemy 1.0.14只是从关系的另一端随意取下
dimensional\u column
。如果我将
join
放在
filter\u by
之后,它将从第一个表中获取,即
MyTable
!这是一个bug还是一个特性?!?!这是一个好主意。关键字表达式是从查询的主实体或调用query.join()的目标的最后一个实体提取的。如果正在加载实体,则查询应在所有列名前面加上表名。如果正在加载列,请显式标记它们。这取决于你在做什么。