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

108 lines
2.8 KiB
Python

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