def get_table(self, table_name: str) -> DBTable: with open(f"{DB_ROOT}/{table_name}/meta_data.json") as the_file: meta_data = json.load(the_file) fields = [db_api.DBField(name, str) for name in meta_data["must"]] return DBTable(table_name, fields, meta_data["key"])
def __init__(self): self.tables_list = {} files = os.listdir(db_api.DB_ROOT) files = list(filter(lambda f: f.endswith('.json'), files)) db = DBTable("Students", [ db_api.DBField("ID", str), db_api.DBField("edges in", Dict[str, Edge]), db_api.DBField("edges out", Dict[str, Edge]) ], "ID") for file in files: db.vertex_list.append(file[:-5]) self.tables_list["Students"] = db
def get_table(self, table_name: str) -> db_api.DBTable: if table_name not in db_table.table_list: raise Exception table = db_table.table_list[table_name] return db_table.DBTable(table['name'], [ db_api.DBField(field[0], dic_types[field[1]]) for field in table['fields'] ], table['key_field_name'], table['amount'])
def get_table(self, table_name: str) -> db_api.DBTable: types = {"str": str, "int": int} DBtable_data = self.read_metadata()[table_name] DBField_data = [ db_api.DBField(iter[0], types[iter[1]]) for iter in DBtable_data["fields"] ] table = DBTable(table_name, DBField_data, DBtable_data["key_field_name"]) return table
def delete_records(self, criteria: List[db_api.SelectionCriteria]) -> None: for file in self.files: rows = readFromFile(file) rows = rows[1:] for row in rows: flag = True for c in criteria: if not calculateOp( type(c.value)(row[self.fields.index( db_api.DBField(c.field_name, type(c.value)))]), c.value, c.operator): flag = False if flag: self.delete_record(row[0])
def get_table(self, table_name: str) -> DBTable: if not self.table_exist(table_name): raise ValueError("Table not exist") DBtable_data = db_metadata[table_name]["DBtable"] DBField_data = [ db_api.DBField(iter[0], types[iter[1]]) for iter in DBtable_data["fields"] ] table = DBTable(table_name, DBField_data, DBtable_data["key_field_name"]) with (DB_ROOT / f'{table.key_field_name}_index_{table.name}.json' ).open('r') as metadata_file: table.key_index = json.load(metadata_file) return table
def query_table( self, criteria: List[db_api.SelectionCriteria]) -> List[Dict[str, Any]]: listToReturn = [] for file in self.files: rows = readFromFile(file) rows = rows[1:] for row in rows: flag = True for c in criteria: if not calculateOp( type(c.value)(row[self.fields.index( db_api.DBField(c.field_name, type(c.value)))]), c.value, c.operator): flag = False if flag: my_dic = {} for i, field in enumerate(self.fields): my_dic[field.name] = row[i] listToReturn.append(my_dic) return listToReturn
def convert_to_db_fields(args): fields = [] for k, v in args.items(): fields.append(db_api.DBField(k, str_to_class(v))) return fields
import db_api as db import os def print_record(record_dict): return str(record_dict).replace("{", "[").replace("}", "]") sick_fields = [db.DBField('ID', int), db.DBField('name', str), db.DBField('symptomatic', bool), db.DBField('age', int)] scientist_fields = [db.DBField('ID', int), db.DBField('name', str), db.DBField('address', str)] sick_to_scientist_fields = [db.DBField('sick_ID', int), db.DBField('scientist_ID', str)] address = ["Jerusalem", "Tel - Aviv", "Haifa"] fight_corona_db = db.DataBase() assert fight_corona_db.num_tables() == 0 # Create tables sick_table = fight_corona_db.create_table("Sick", sick_fields, 'ID') scientists_table = fight_corona_db.create_table("Scientists", scientist_fields, 'ID') sick_to_scientist_table = fight_corona_db.create_table("Sick_to_scientist", sick_to_scientist_fields, 'sick_ID') assert fight_corona_db.num_tables() == 3 for idx in range(100): sick_table.insert_record({'ID': idx, 'name': "sick" + str(idx), 'symptomatic': True if idx % 2 else False, 'age': idx + idx % 4})
def get_table(self, table_name: str) -> DBTable: meta_data = files.load(f"{DB_ROOT}/{table_name}/meta_data.json") fields = [db_api.DBField(name, str) for name in meta_data["must"]] return DBTable(table_name, fields, meta_data["key"], meta_data)
self.numOfTables -= 1 def get_tables_names(self) -> List[Any]: return list(self.tables.keys()) ''' def query_multiple_tables( self, tables: List[str], fields_and_values_list: List[List[SelectionCriteria]], fields_to_join_by: List[str] ) -> List[Dict[str, Any]]: raise NotImplementedError''' field1 = db_api.DBField("name", str) field2 = db_api.DBField("age", int) field3 = db_api.DBField("id", int) table = DBTable() table.createNew("Person", [field3, field1, field2], "id") table.insert_record({"name": "Pnini", "age": 5, "id": 315437145}) table.insert_record({"name": "Shira", "age": 4, "id": 211426754}) table.create_index("age") table.insert_record({"name": "Elisheva", "age": 11, "id": 333094951}) for i in table.index: print(i) print(list(table.index[i].keys())) print(list(table.index[i].values())) table.delete_record(315437145) for i in table.index: print(i)
def get_tables_names(self) -> List[Any]: return list(self.tables_list.keys()) def query_multiple_tables( self, tables: List[str], fields_and_values_list: List[List[SelectionCriteria]], fields_to_join_by: List[str]) -> List[Dict[str, Any]]: raise NotImplementedError if __name__ == '__main__': vertex = [] db = DBTable("my table", [ db_api.DBField("name", str), db_api.DBField("population", int), db_api.DBField("edges in", Dict[str, Edge]), db_api.DBField("edges out", Dict[str, Edge]) ], "name") Tel_Aviv = { "name": "Tel Aviv", "population": 100, "edges in": { "Yafo": 16 }, "edges out": { "Eilat": 80, "Yahud": 30 }