14
votes

ndb: (from google.appengine.ext import ndb)

datastore: (from gcloud import datastore)

What's the difference? I've seen both of them used, and hints they both save data to google datastore. Why are there two different implementations?

2
I'm using python if that matters at allinvapid

2 Answers

11
votes

The Python NDB Client is specific to Python Applications running on Google App Engine. The datastore client removes that restriction and you can run your Python application anywhere, including Google App Engine, Google Compute Engine or anywhere else.

Exceprt form - https://cloud.google.com/appengine/docs/python/ndb/

The Google Datastore NDB Client Library allows App Engine Python apps to connect to Cloud Datastore.

In addition, the NDB client has certain features (e.g. caching) while the other does not appeat to support.

2
votes

The reason for the two implementations is that originally, the Datastore (called App Engine Datastore) was only available from inside App Engine (through a private RPC API). On Python, the only way to access this API was through an ORM-like library (NDB). As you can see on the import, it is part of the App Engine API.

Now Google has made the Datastore available outside of App Engine through a restful API called Cloud Datastore API. gcloud library is a client library that allows access to different rest APIs from Google Cloud, including the Cloud Datastore API.