· 6 years ago · Jun 21, 2019, 08:56 PM
1import logging
2import time
3from cassandra import ConsistencyLevel
4from cassandra.cluster import Cluster, BatchStatement
5from cassandra.query import SimpleStatement
6from cassandra.auth import PlainTextAuthProvider
7
8class PythonCassandraExample:
9
10 def __init__(self):
11 self.cluster = None
12 self.session = None
13 self.keyspace = None
14 self.log = None
15
16 def __del__(self):
17 self.cluster.shutdown()
18
19 def createsession(self):
20 auth_provider = PlainTextAuthProvider(username='cassandra', password='cassandra')
21 self.cluster = Cluster(['10.220.151.138'],auth_provider = auth_provider)
22 self.session = self.cluster.connect(self.keyspace)
23
24 def getsession(self):
25 return self.session
26
27 # How about Adding some log info to see what went wrong
28 def setlogger(self):
29 log = logging.getLogger()
30 log.setLevel('INFO')
31 handler = logging.StreamHandler()
32 handler.setFormatter(logging.Formatter("%(asctime)s [%(levelname)s] %(name)s: %(message)s"))
33 log.addHandler(handler)
34 self.log = log
35
36 # Create Keyspace based on Given Name
37 def createkeyspace(self, keyspace):
38 """
39 :param keyspace: The Name of Keyspace to be created
40 :return:
41 """
42 # Before we create new lets check if exiting keyspace; we will drop that and create new
43 rows = self.session.execute("SELECT keyspace_name FROM system_schema.keyspaces")
44 if keyspace in [row[0] for row in rows]:
45 self.log.info("dropping existing keyspace...")
46 self.session.execute("DROP KEYSPACE " + keyspace)
47
48 self.log.info("creating keyspace...")
49 self.session.execute("""
50 CREATE KEYSPACE %s
51 WITH replication = { 'class': 'SimpleStrategy', 'replication_factor': '2' }
52 """ % keyspace)
53
54 self.log.info("setting keyspace...")
55 self.session.set_keyspace(keyspace)
56
57 def create_table(self):
58 c_sql = """
59 CREATE TABLE IF NOT EXISTS employee (emp_id int PRIMARY KEY,
60 ename varchar,
61 sal double,
62 city varchar);
63 """
64 self.session.execute(c_sql)
65 self.log.info("Employee Table Created !!!")
66
67 # lets do some batch insert
68 def insert_data(self):
69 i = 1
70 while i < 1000000:
71 insert_sql = self.session.prepare("INSERT INTO employee (emp_id, ename , sal,city) VALUES (?,?,?,?)")
72 batch = BatchStatement()
73 batch.add(insert_sql, (i, 'Danny', 2555, 'De-vito'))
74 self.session.execute(batch)
75 # self.log.info('Batch Insert Completed for ' + str(i))
76 i += 1
77
78 # def select_data(self):
79 # rows = self.session.execute('select count(*) from perftest.employee limit 5;')
80 # for row in rows:
81 # print(row.ename, row.sal)
82
83 def update_data(self):
84 pass
85
86 def delete_data(self):
87 pass
88
89
90if __name__ == '__main__':
91 example1 = PythonCassandraExample()
92 example1.createsession()
93 example1.setlogger()
94 example1.createkeyspace('perftest')
95 example1.create_table()
96
97 # Populate perftest.employee table
98 start = time.time()
99 example1.insert_data()
100 end = time.time()
101 print ('Duration: ' + str(end-start) + ' sec.')
102
103 # example1.select_data()