""" Borrar Objetos de una base de datos desde Python """ import sqlite3 DB_PATH = './4-3d_prueba.db' class MonedaNoExiste(Exception): pass class AdminMoneda(object): def __init__(self, database=None): if not database: database = ':memory:' self.conn = sqlite3.connect(database) self.cursor = self.conn.cursor() def insert(self, obj): query = 'INSERT INTO moneda VALUES ("{}", "{}", "{}")'.format(obj.codigo, obj.nombre, obj.simbolo) self.cursor.execute(query) self.conn.commit() def get(self, codigo): query = 'SELECT * FROM moneda WHERE codigo="{}"'.format(codigo) self.cursor.execute(query) datos = self.cursor.fetchone() if not datos: raise MonedaNoExiste("No existe la moneda código []".format(codigo)) return Moneda(codigo=datos[0], nombre=datos[1], simbolo=datos[2]) def filtro(self, **kwargs): codigo = kwargs.get('codigo') nombre = kwargs.get('nombre') simbolo = kwargs.get('simbolo') condicion = ' WHERE ' agregar_y = False agregar_condicion = False if codigo: condicion += 'codigo="{}"'.format(codigo) agregar_condicion = True agregar_y = True if nombre: if agregar_y: condicion += ' AND ' condicion += 'nombre="{}"'.format(nombre) agregar_condicion = True agregar_y = True if simbolo: if agregar_y: condicion += ' AND ' condicion += 'simbolo="{}"'.format(simbolo) agregar_condicion = True query = 'SELECT * FROM moneda' if agregar_condicion: query += condicion self.cursor.execute(query) resultado = self.cursor.fetchall() monedas = [] for datos in resultado: moneda = Moneda(codigo=datos[0], nombre=datos[1], simbolo=datos[2]) monedas.append(moneda) return monedas def update(self, old_obj, obj): updated = False add_comma = False query = 'UPDATE moneda SET ' if old_obj.nombre != obj.nombre: query += 'nombre="{}"'.format(obj.nombre) updated = True add_comma = True if old_obj.simbolo != obj.simbolo: if add_comma: query += ', ' query += 'simobolo="{}"'.format(obj.simbolo) if updated: query += ' WHERE codigo="{}"'.format(obj.codigo) self.cursor.execute(query) self.conn.commit() def save(self, obj): try: old_obj = self.get(codigo=obj.codigo) except MonedaNoExiste: self.insert(obj) else: self.update(old_obj, obj) def delete(self, obj): query = 'DELETE FROM moneda WHERE codigo="{}"'.format(obj.codigo) self.cursor.execute(query) self.conn.commit() class Moneda(object): """ Modelo Moneda """ objetos = AdminMoneda(DB_PATH) def __init__(self, codigo, nombre, simbolo): self.codigo = codigo self.nombre = nombre self.simbolo = simbolo def __repr__(self): return u'{}'.format(self.nombre) """ ej. 4-3d """ # clp = Moneda(codigo='CLP', nombre='Pesos', simbolo='$') # usd = Moneda(codigo='USD', nombre='Dolar', simbolo='US$') # eur = Moneda(codigo='EUR', nombre='Euro', simbolo='€') # # Moneda.objetos.insert(clp) # Moneda.objetos.insert(usd) # Moneda.objetos.insert(eur) """ ej. 4-3e """ # print(Moneda.objetos.get(codigo='CLP')) # # Moneda.objetos.get(codigo='ART') # print(Moneda.objetos.filtro(codigo='EUR')) # print(Moneda.objetos.filtro(nombre='Dolar')) # print(Moneda.objetos.filtro(simbolo='€')) # # print(Moneda.objetos.filtro()) """ ej. 4-3f """ # peso_cl = Moneda.objetos.get(codigo='CLP') # Moneda.objetos.save(peso_cl) # # print(peso_cl.codigo) # print(peso_cl.nombre) # print(peso_cl.simbolo) # # peso_cl.nombre = 'Pesos (CL)' # Moneda.objetos.save(peso_cl) # peso_cl = Moneda.objetos.get(codigo='CLP') # print(peso_cl.codigo) # print(peso_cl.nombre) # print(peso_cl.simbolo) # # peso_uru = Moneda(codigo='UYU', nombre='Pesos Uruguayos', simbolo='$') # Moneda.objetos.save(peso_uru) # # pesos_uru = Moneda.objetos.get(codigo='UYU') # print(peso_uru.codigo) # print(peso_uru.nombre) # print(peso_uru.simbolo) pesos_uru = Moneda.objetos.get(codigo='UYU') Moneda.objetos.delete(pesos_uru) # pesos_uru = Moneda.objetos.get(codigo='UYU')