171 lines
4.5 KiB
Python
171 lines
4.5 KiB
Python
|
"""
|
||
|
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')
|