在谷歌App Engine的,我怎么会查找在GQL客户的最新订单?
-
05-09-2019 - |
题
如果我有两个表,客户和订单,我要查找最新的订单客户,我将如何使用GQL做到这一点在谷歌应用程序引擎?
通常,我将通过外键,CUSTOMER_ID,它存在于订单表连接这两个表
select orders.* from customers, orders
where customers.customer_id = orders.customer_id
and orders.order_id = (select top 1 sub_orders.order_id from orders sub_orders
where sub_orders.customer_id = orders.customer_id
order by sub_orders.order_date desc)
然而,由于加入似乎不能够在谷歌App Engine的,我不知道如何解决此限制。任何建议,将不胜感激。
解决方案
在谷歌App Engine的数据存储是真正从关系型数据库完全不同。有一些相似之处,但它当你设计你的数据模型,以了解这些差异是非常重要的。
你通常会定义这种关系的方式是通过使用参考属性:
class Customer(db.Model):
name = db.StringProperty()
class Order(db.Model):
customer = db.ReferenceProperty( Customer,
collection_name = 'orders' )
在Order实体定义导致在客户实体创建一个属性的的ReferenceProperty,命名为“订单”,因此,如果“客户”是一个客户实例,您可以参考“客户找到所有的订单。命令'。
例如:
customer = Customer.gql("WHERE name = :1", "Bob")[0] # Returns the first customer named Bob
order1 = customer.orders[0]
order2 = customer.orders.order("date")[0] # Sorts the Orders by date and gets the first one
参考属性都记录。
要了解的另一个重要概念是实体组的想法。在一个实体组实体被存储在同一节点上,因此,它们可以被存储并更有效地检索。他们还利用交易是至关重要的。
不隶属于 StackOverflow