Using multi_get()

Store.multi_get() allows you to retrieve multiple rows at once, so long as they all share the same shard keys. You must specify a full set of shard keys to this method.

Use Store.multi_get() only if your retrieval set will fit entirely in memory.

For example, suppose you have a table that stores information about products, which is designed like this:

CREATE TABLE myTable (
    itemType STRING,
    itemCategory STRING,
    itemClass STRING,
    itemColor STRING,
    itemSize STRING,
    price FLOAT,
    inventoryCount INTEGER,
    PRIMARY KEY (SHARD(itemType, itemCategory, itemClass), itemColor,
    itemSize)
) 

With tables containing data like this:

In this case, you can retrieve all of the rows with their itemType field set to Hats and their itemCategory field set to baseball. Notice that this represents a partial primary key, because itemClass, itemColor and itemSize are not used for this query.

...

def display_row(row):
    try:
            print "Retrieved row:"
            print "\tItem Type: %s" % row['itemType']
            print "\tCategory: %s" % row['itemCategory']
            print "\tClass: %s" % row['itemClass']
            print "\tSize: %s" % row['itemSize']
            print "\tColor: %s" % row['itemColor']
            print "\tPrice: %s" % row['price']
            print "\tInventory Count: %s" % row['inventoryCount']
    except KeyError, ke:
        logging.error("Row display failed. Bad key: %s" % ke.message)

def do_store_ops(store):
    try:
        shard_key_d = {"itemType" : "Hats",
                        "itemCategory" : "baseball",
                        "itemClass" : "longbill"}

        row_list =
            store.multi_get("myTable",   # table name
                            False,       # Retrieve only keys?
                            shard_key_d) # partial primary key
        if not row_list:
            logging.debug("Table retrieval failed")
        else:
            logging.debug("Table retrieval succeeded.")
            for r in row_list:
                display_row(r)
    except IllegalArgumentException, iae:
        logging.error("Table retrieval failed.")
        logging.error(iae.message) 

Notice in the previous example that Store.multi_get() returns the table rows in a simple Python list. To display the rows, you simply iterate over the list in the same way you would any Python list.