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