Google App Engine에서 GQL의 고객을위한 최신 주문을 어떻게 찾아 볼까요?
-
05-09-2019 - |
문제
두 개의 테이블, 고객 및 주문이 있고 고객을위한 최신 주문을 찾고 싶다면 GQL을 사용하여 Google App Engine에서 어떻게해야합니까?
일반적으로 주문 테이블에 존재하는 외국 키 인 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)
그러나 Google App Engine에서는 조인이 불가능한 것처럼 보이 므로이 제한을 해결하는 방법을 잘 모르겠습니다. 모든 제안은 감사 할 것입니다.
해결책
Google App Engine의 DataStore는 관계형 데이터베이스와는 상당히 다릅니다. 몇 가지 유사점이 있지만 데이터 모델을 디자인 할 때 차이점을 이해하는 것이 중요합니다.
일반적으로 이러한 종류의 관계를 정의하는 방법은 참조 속성을 사용하는 것입니다.
class Customer(db.Model):
name = db.StringProperty()
class Order(db.Model):
customer = db.ReferenceProperty( Customer,
collection_name = 'orders' )
Order Entity 정의의 참고 자료는 'Orders'라는 고객 엔티티의 속성을 생성하여 '고객'이 고객 인스턴스 인 경우 'Customer.orders'를 참조하여 모든 주문을 찾을 수 있습니다.
예를 들어:
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