Apuntes_Python/01_curso/Modulo_4/4-3f_update_db.py
2022-12-24 22:41:20 -03:00

159 lines
4.1 KiB
Python

"""
Actualizar 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)
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())
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)