Showing posts with label How to access the NoSQL databases through Python Applications. Show all posts
Showing posts with label How to access the NoSQL databases through Python Applications. Show all posts

Sunday, 21 May 2017

How to access the NoSQL databases through Python Applications

NoSQL Databases Categories:



  • Key-value stores        ---> Redis, DynamoDB, Riak,... etc
  • Column-oriented        ---> BigTable, Cassandra, SimpleDB,... etc.
  • Graph                         ---> OrientDB, Neo4J, Titan,...etc
  • Document oriented    --->  MongoDB, CouchDB,... etc




  • In order to work with Key-value store databases, here i discus only one database is DynamoDB, first we are install pynamodb.
  • PynamoDB provides an ORM like interface to DynamoDB and supports both Python 2 and Python 3. 
  • The entire DynamoDB API is supported by PynamoDB - including global and local secondary indexes, batch operations, binary attributes, queries, scans, etc.
  • You can use Dynamodb-mapper Python library. It's a simple/tiny abstraction layer that allows you to map plain Python object to DynamoDB. It also features a transaction engine.
  • For advanced tasks such as table management it is still better to directly use Boto 

 pip install pynamodb

Creating a model:

from pynamodb.models import Model
from pynamodb.attributes import UnicodeAttribute

class UserModel(Model):
    """
    A DynamoDB User
    """
    class Meta:
        table_name = 'dynamodb-user'
        region = 'us-west-1'
    email = UnicodeAttribute(hash_key=True)
    first_name = UnicodeAttribute()
    last_name = UnicodeAttribute()
create the table
 UserModel.create_table(read_capacity_units=1, write_capacity_units=1)

Working with column databases:

  • in order to work with cassandra database,we need install cassandra-driver.
pip install cassandra-driver
Connecting to Cassandra

from cassandra.cluster import Cluster

cluster = Cluster()
                  (or)

from cassandra.cluster import Cluster

cluster = Cluster(['192.168.0.1', '192.168.0.2'])

Instantiating a Cluster does not actually connect us to any nodes. 
To establish connections and begin executing queries we need a Session, 
which is created by calling Cluster.connect():
cluster = Cluster()
session = cluster.connect()

Executing Queries

rows = session.execute('SELECT name, age,email FROM users')
for user_row in rows:
    print user_row.name, user_row.age, user_row.email

Working with Graph databases:
pip install neo4j-driver

from neo4j.v1 import GraphDatabase, basic_auth

  driver = GraphDatabase.driver("bolt://localhost:7687", 
                  auth=basic_auth("neo4j", "neo4j"))
  session = driver.session()

  session.run("CREATE (a:Person {name: {name}, title: {title}})",
              {"name": "Arthur", "title": "King"})

  result = session.run("MATCH (a:Person) WHERE a.name = {name} "
                       "RETURN a.name AS name, a.title AS title",
                       {"name": "Arthur"})
  for record in result:
      print("%s %s" % (record["title"], record["name"]))

  session.close()

pip install py2neo


from py2neo import Graph, Path
graph = Graph()

tx = graph.cypher.begin()
for name in ["Alice", "Bob", "Carol"]:
    tx.append("CREATE (person:Person {name:{name}}) RETURN person", name=name)
alice, bob, carol = [result.one for result in tx.commit()]

friends = Path(alice, "KNOWS", bob, "KNOWS", carol)
graph.create(friends)

Working with document oriented databases:
In order to work with mongoDb database, 
first we need to install pymongo .

pip install pymongo

import pymongo

Making a Connection with MongoClient

from pymongo import MongoClient
client = MongoClient()

client = MongoClient('localhost', 27017)

client = MongoClient('mongodb://localhost:27017/')

Getting a Database

db = client.test_database
              (or)
db = client['test-database']

Getting a Collection

collection = db.test_collection
               (or)
collection = db['test-collection']

Documents

import datetime
post = {"author": "Mike",
         "text": "My first blog post!",
         "tags": ["mongodb", "python", "pymongo"],
         "date": datetime.datetime.utcnow()}


Inserting a Document

posts = db.posts
post_id = posts.insert_one(post).inserted_id
post_id
ObjectId('...')