-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathDBProcessor.py
More file actions
57 lines (41 loc) · 1.77 KB
/
DBProcessor.py
File metadata and controls
57 lines (41 loc) · 1.77 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import cx_Oracle
from DataProcessingInterfaces import ISerializer, ISaver, ILoader
class DBSerializer(ISerializer):
# serialized_data_list should be a list of lists like [class_name, [attrs, types, values]]
@staticmethod
def serialize_data(serialized_data_list):
for instance_data in serialized_data_list:
serialized_instance_dict_list = instance_data[1]
for i in range(len(serialized_instance_dict_list[1])):
if serialized_instance_dict_list[1][i] == 'str':
serialized_instance_dict_list[1][i] = 'VARCHAR(50)'
elif serialized_instance_dict_list[1][i] in ('int', 'float'):
serialized_instance_dict_list[1][i] = 'NUMBER'
else:
raise Exception('Such type of attribute can not be serialized')
@staticmethod
def deserialize(serialized_data_list):
pass
class DBSaver(ISaver):
# data is the list of lists like [class_name, [attrs, types, values]]
@staticmethod
def save_data(data):
DBSerializer.serialize_data(data)
data.sort(key=lambda instance_data: instance_data[0]) # sort by class_name
obj_dict = {}
max_length = 0
for elem in data:
if not obj_dict[elem[0]]:
obj_dict[elem[0]] = elem[1]
max_length = max(len(elem[0]), max_length)
for key, elem in obj_dict:
con = cx_Oracle.connect("Game", "game2000", "User-PC/XE")
cursor = con.cursor()
cursor.execute("""CREATE TABLE %s()""" %(key))
for attr_data in elem:
cursor.execute("""ALTER TABLE %s""")
# Vitaliy took 100 grivnas from you
class DBLoader(ILoader):
@staticmethod
def load_data():
pass