Sur Google App Engine, comment pourrais-je consulter la dernière commande pour un client dans GQL?

StackOverflow https://stackoverflow.com/questions/902516

  •  05-09-2019
  •  | 
  •  

Question

Si j'ai deux tables, les clients et les commandes, et je veux chercher la dernière commande pour un client, comment pourrais-je faire sur Google App Engine avec GQL?

Normalement, je rejoindrait ces deux tables par la clé étrangère, customer_id, qui existe dans la table des commandes.

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)

Cependant, étant donné que les jointures ne semble pas être possible sur Google App Engine, je ne suis pas sûr de savoir comment contourner cette limitation. Toutes les suggestions seraient appréciés.

Était-ce utile?

La solution

Le magasin de données dans Google App Engine est vraiment tout à fait différent d'une base de données relationnelle. Il y a quelques similitudes, mais il est important de comprendre les différences lorsque vous vous concevez modèle de données.

La façon dont vous définiriez normalement ce genre de relation est en utilisant les propriétés de référence:

class Customer(db.Model):
    name = db.StringProperty()

class Order(db.Model):
   customer = db.ReferenceProperty( Customer,
                                    collection_name = 'orders' )

La ReferenceProperty dans la définition de l'entité Ordre des résultats dans la création d'une propriété dans l'entité client, « ordres » nommés, de sorte que si « client » est une instance de client, vous pouvez trouver toutes les commandes en se référant à « client. ordres'.

Par exemple:

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

Propriétés de référence sont documentées href="http://code.google.com/appengine/docs/python/datastore/entitiesandmodels.html#References" ici.

Un autre concept important de comprendre l'idée des groupes d'entités. Les entités dans un groupes d'entités sont stockés sur le même noeud, et par conséquent, ils peuvent être stockés et récupérés plus efficacement. Ils sont également essentiels pour l'utilisation de transactions.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top