import sqlite3
class ItemComputer:
"""
Wrapper class for a record in the table computer
field names/types of table computer
name : text
cores : integer
cpu_speed : real
ram : real
cost : real
"""
def __init__(self, name='', cores=0, cpu_speed=0, ram=0, cost=0):
self.__set_name(name)
self.__set_cores(cores)
self.__set_cpu_speed(cpu_speed)
self.__set_ram(ram)
self.__set_cost(cost)
def __str__(self):
return "ItemComputer[name:" + self.__name + "|cores:" + str(self.__cores) + \
"|cpu_speed:" + str(self.__cpu_speed) + \
"|ram:" + str(self.__ram) + "|cost:" + str(self.__cost) + "]"
def __get_name(self):
return self.__name
def __set_name(self, name):
if name is None:
raise ValueError('None is not a valid value')
if not isinstance(name, str):
raise ValueError('wrong type: must be a string')
self.__name = name
def __get_cores(self):
return self.__cores
def __set_cores(self, cores):
if cores is None:
raise ValueError('None is not a valid value')
if not isinstance(cores, int):
cores = int(cores)
self.__cores = cores
def __get_cpu_speed(self):
return self.__cpu_speed
def __set_cpu_speed(self, cpu_speed):
if cpu_speed is None:
raise ValueError('None is not a valid value')
if not isinstance(cpu_speed, int):
cpu_speed = int(cpu_speed)
self.__cpu_speed = cpu_speed
def __get_ram(self):
return self.__ram
def __set_ram(self, ram):
if ram is None:
raise ValueError('None is not a valid value')
if not isinstance(ram, int):
ram = int(ram)
self.__ram = ram
def __get_cost(self):
return self.__cost
def __set_cost(self, cost):
if cost is None:
raise ValueError('None is not a valid value')
if not isinstance(cost, int) and not isinstance(cost, float):
try:
cost = int(cost)
except:
try:
cost = float(cost)
except Exception as e:
print(e)
raise e
self.__cost = cost
name = property(__get_name, __set_name)
cores = property(__get_cores, __set_cores)
cpu_speed = property(__get_cpu_speed, __set_cpu_speed)
ram = property(__get_ram, __set_ram)
cost = property(__get_cost, __set_cost)
def print_item(self):
print("{:10}: {}".format("name", self.__name))
print("{:10}: {}".format("cores", self.__cores))
print("{:10}: {}".format("cpu_speed", self.__cpu_speed))
print("{:10}: {}".format("ram", self.__ram))
print("{:10}: {}".format("cost", self.__cost))
def set_item(self, row):
if not isinstance(row, tuple):
raise ValueError('list expected')
self.__set_name("Invalid")
self.__set_cores(0)
self.__set_cpu_speed(0)
self.__set_ram(0)
self.__set_cost(0)
self.__set_name(row[0])
self.__set_cores(row[1])
self.__set_cpu_speed(row[2])
self.__set_ram(row[3])
self.__set_cost(row[4])
def fill_item(self, change_name=True):
if change_name:
self.__set_name("Invalid")
self.__set_cores(0)
self.__set_cpu_speed(0)
self.__set_ram(0)
self.__set_cost(0)
print("Enter the details:")
if change_name:
while True:
resp = input("{0:10}: ".format("name"))
resp = resp.strip()
try:
self.__set_name(resp)
except ValueError as e:
print(e)
continue
break
while True:
resp = input("{0:10}: ".format("cores"))
resp = resp.strip()
try:
self.__set_cores(resp)
except Exception as e:
print(e)
continue
break
while True:
resp = input("{0:10}: ".format("cpu_speed"))
resp = resp.strip()
try:
self.__set_cpu_speed(resp)
except Exception as e:
print(e)
continue
break
while True:
resp = input("{0:10}: ".format("ram"))
resp = resp.strip()
try:
self.__set_ram(resp)
except Exception as e:
print(e)
continue
break
while True:
resp = input("{0:10}: ".format("cost"))
resp = resp.strip()
try:
self.__set_cost(resp)
except Exception as e:
print(e)
continue
break
def item_create():
conn = sqlite3.connect("computer_cards.db")
item = ItemComputer()
item.fill_item()
sql = "INSERT INTO computer(name, cores, cpu_speed, ram, cost) VALUES ('{}', {}, {}, {}, {})".format(
item.name, item.cores, item.cpu_speed, item.ram, item.cost)
print("SQL:>>>>>" + sql + "<<<<<")
conn.execute(sql)
conn.commit()
conn.close()
def item_read(name):
conn = sqlite3.connect("computer_cards.db")
sql = "SELECT * FROM computer WHERE name = '{}'".format(name)
print("SQL:>>>>>" + sql + "<<<<<")
result = conn.execute(sql)
row = result.fetchone()
if row is None:
print("no item found with name {}".format(name))
return
item = ItemComputer()
item.set_item(row)
print("Current values of item {}".format(name))
item.print_item()
conn.close()
def item_update(name):
conn = sqlite3.connect("computer_cards.db")
sql = "SELECT * FROM computer WHERE name = '{}'".format(name)
print("SQL:>>>>>" + sql + "<<<<<")
result = conn.execute(sql)
row = result.fetchone()
if row is None:
print("no item found with name {}".format(name))
return
item = ItemComputer()
item.set_item(row)
print("Current values of item {}".format(name))
item.print_item()
item.fill_item(change_name=False)
sql = "UPDATE computer SET cores = {}, cpu_speed = {}, ram = {}, cost = {} WHERE name = '{}'".format(
item.cores, item.cpu_speed, item.ram, item.cost, name)
print("SQL:>>>>>" + sql + "<<<<<")
cursor = conn.cursor()
cursor.execute(sql)
print("SQL updated items:", cursor.rowcount)
cursor.close()
conn.commit()
conn.close()
def item_delete(name):
conn = sqlite3.connect("computer_cards.db")
cursor = conn.cursor()
sql = "DELETE FROM computer WHERE name = '{}'".format(name)
print("SQL:>>>>>" + sql + "<<<<<")
cursor.execute(sql)
print("SQL deleted items:", cursor.rowcount)
if cursor.rowcount < 1:
print("no item found with name '{}'".format(name))
if cursor.rowcount > 1:
print("{} items with name '{}' deleted".format(cursor.rowcount, name))
cursor.close()
conn.commit()
conn.close()
def item_list_all():
conn = sqlite3.connect("computer_cards.db")
result = conn.execute("SELECT * FROM computer ORDER BY name")
computers = result.fetchall()
for computer in computers:
item = ItemComputer()
item.set_item(computer)
item.print_item()
print("--------------------")
conn.close()
while True:
action = input("Action: Create, Read, Update, Delete, List, Quit[c/r/u/d/l/q]: ")
if action not in ["C","c","R","r","U","u","D","d","L","l","Q","q"]:
print("Unknown action")
continue;
if action in ["Q","q"]:
break
if action in ["C", "c"]:
item_create()
continue
if action in ["R", "r"]:
while True:
name = input("Give name of item to read:")
if len(name) == 0:
continue
break
item_read(name)
continue
if action in ["U", "u"]:
while True:
name = input("Give name of item to update:")
if len(name) == 0:
continue
break
item_update(name)
continue
if action in ["D", "d"]:
while True:
name = input("Give name of item to delete:")
if len(name) == 0:
continue
break
item_delete(name)
continue
if action in ["L", "l"]:
print("Print content of table computer")
item_list_all()
continue
Comments