如何让SQLAlchemy 1.1打印出查询结果?

时间:2016-12-21 13:30:47

标签: python sqlalchemy

我正在运行以下查询:

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>)]

看起来是对的,但是有一种简单的方法可以真正看到结果吗?

3 个答案:

答案 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())