Python Peewee别名不工作并引发AttributeError

Python Peewee别名不工作并引发AttributeError,python,peewee,Python,Peewee,我有一个订单型号和付款型号。付款模式有一个jsonb列data 我的问题是: orders = ( Order .select(Order, Payment.data.alias('payment_data')) .join(Payment, JOIN_LEFT_OUTER, on=(Order.payment==Payment.id)) .iterator() ) 当我迭代上述查询并访问orde

我有一个
订单
型号和
付款
型号。付款模式有一个
jsonb
data

我的问题是:

orders = (
          Order
          .select(Order, Payment.data.alias('payment_data'))
          .join(Payment, JOIN_LEFT_OUTER, on=(Order.payment==Payment.id))
          .iterator()
         )
当我迭代上述查询并访问
order.payment\u data
时,我得到了一个
AttributeError

但是如果我在下面编写查询,它会在迭代订单时在dict中为我提供
payment\u data
键:

orders = (
          Order
          .select(Order, Payment.data.alias('payment_data'))
          .join(Payment, JOIN_LEFT_OUTER, on=(Order.payment==Payment.id))
          .dicts()
          .iterator()
         )
有人能解释一下我在第一次查询中做错了什么,以及如何访问
订单.付款数据


谢谢

这可能是因为在连接结果中有
NULL
字段。可能您错过了某些记录的
付款\u数据
,peewee没有按预期处理这种情况

检查您的查询结果是否在
付款\u数据
的位置包含
NULL
s。如果是这样,您可能应该在每次迭代中检查
订单
是否具有
付款数据
属性

下面是关于Github的更详细说明:

当我迭代上述查询并访问order.payment_数据时,我得到的是AttributeError

付款数据可能正在附加到相关的付款实例。因此,您不必使用
order.payment\u data
查找值,而应使用:

order.payment.payment_data
如果希望将所有属性直接修补到订单上,请使用
objects()
query方法,该方法跳过模型/关系图:

orders = (Order
          .select(Order, Payment.data.alias('payment_data'))
          .join(Payment, JOIN_LEFT_OUTER, on=(Order.payment==Payment.id))
          .objects()  # Do not make object-graph
          .iterator())
for order in orders:
    print(order.id, order.payment_data)

这些都包含在文档中:

对于某些订单,我将没有付款记录,这就是为什么我在订单上进行左外联接。我检查了是否有关联的付款记录,但仍然没有看到
payment\u data
属性。请尝试在查询中包含
payment.id
:选择(Order、payment.id、payment.data.alias('payment\u data'))也不起作用。我最后做的就是这个。这是一个解决方案,但我还必须从
Payment
model中选择其他列<代码>订单=(Order.select(Order,Payment).join(Payment,join\u LEFT\u OUTER,on=(Order.Payment==Payment.id).别名('Payment\u table')).dicts().iterator())