我正在运行以下查询:
s.query(db.Order, db.Execution).join(db.Execution).all()
产生的输出如下:
[(<db.Order at 0x7fd061efeda0>, <db.Execution at 0x7fd061789780>),
(<db.Order at 0x7fd061efeda0>, <db.Execution at 0x7fd061789b38>),
(<db.Order at 0x7fd061efee48>, <db.Execution at 0x7fd061789550>),
(<db.Order at 0x7fd061efeb00>, <db.Execution at 0x7fd061789630>),
(<db.Order at 0x7fd061efeb00>, <db.Execution at 0x7fd061741400>),
(<db.Order at 0x7fd0603bdcf8>, <db.Execution at 0x7fd060de3c88>),
(<db.Order at 0x7fd0603bdcf8>, <db.Execution at 0x7fd060de3c18>),
(<db.Order at 0x7fd0603bdcf8>, <db.Execution at 0x7fd060de3860>),
(<db.Order at 0x7fd061efe4e0>, <db.Execution at 0x7fd0617412e8>),
(<db.Order at 0x7fd0603bdcf8>, <db.Execution at 0x7fd060de3710>),
(<db.Order at 0x7fd0603bdcf8>, <db.Execution at 0x7fd060de35c0>),
(<db.Order at 0x7fd061f13438>, <db.Execution at 0x7fd061741ba8>)]
看起来是对的,但是有一种简单的方法可以真正看到结果吗?
答案 0 :(得分:1)
尝试在SQLAlchemy映射对象(Order and Execution)中实现 repr 方法。 假设您的Order对象具有“id”属性,那么您可能需要这样做:
#...inside class Order
def __repr__(self):
return "<Order(id=" + str(self.id) + ")>")
HTH
C
答案 1 :(得分:1)
如果您需要查看可用于的结果,查询将返回一个列表,因为您可以看到每个元素都有一个Order和一个Execution对象。因此,您可以访问对象属性:
result = s.query(db.Order,db.Execution).join(db.Execution).all()
for r in result:
print(r.Order.id, r.Execution.id)
答案 2 :(得分:0)
如果您想接收对象的实例,那么您已经看到了实际的结果。
但是,如果您希望获得更加用户友好的视图,那么您应该实现__repr__
。
如果你想要的是看到一些列,那么指定列而不是整个对象,你将只得到那些列(值)。例如:
s.query(
db.Order.id,
db.Order.name,
db.Execution.date,
db.Execution.type.label("execution_type"),
).join(db.Execution).all()
如果您真的想要查询的所有列,那么您也可以执行以下操作:
q = s.query(db.Order, db.Execution).join(db.Execution)
q = s.execute(s.subquery())