teslariu

base

Dec 7th, 2021
991
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. """
  4. Script para administrar la base restaurante.db
  5. """
  6. import sqlite3
  7.  
  8. def mostrar_opciones():
  9.     return """
  10.         Menu de administracion de platos
  11.     *--------------------------------------------*
  12.         1. Agregar categoría de platos
  13.         2. Agregar platos
  14.         3. Mostrar menu
  15.         4. Salir
  16.     *--------------------------------------------*
  17.     """
  18.    
  19. def agregar_categoria(nombre):
  20.     try:
  21.         conn.execute("INSERT INTO categorias VALUES (null,?)",(nombre,))
  22.     except sqlite3.IntegrityError:
  23.         print(f"Error. Ya existe la categoria '{nombre}'")
  24.     else:
  25.         conn.commit()
  26.    
  27.    
  28. def agregar_plato():
  29.     try:
  30.         cursor.execute("SELECT * FROM categorias ORDER BY id")
  31.     except sqlite3.OperationalError:
  32.         print("La consulta sobre categorías no se ejecutó correctamente")
  33.     else:
  34.         categorias = cursor.fetchall()
  35.         if categorias:
  36.             id_categoria = []
  37.             print("Categorias")
  38.             print("----------")
  39.             print("ID | nombre")
  40.             print("-------------")
  41.             for ID,nombre in categorias:
  42.                 id_categoria.append(ID)
  43.                 print(f"{ID} | {nombre}")
  44.                
  45.             while True:
  46.                 try:
  47.                     ID = int(input("\nSeleccione un ID: "))
  48.                 except ValueError:
  49.                     print("El ID debe ser un nro entero")
  50.                 else:
  51.                     if ID in id_categoria:
  52.                         break
  53.                     print("ID de categoría inexistente")
  54.             nombre_plato = input("Ingrese el nombre del plato: ")
  55.             try:
  56.                 conn.execute("INSERT INTO platos VALUES (null,?,?)",(nombre_plato,ID))
  57.             except sqlite3.IntegrityError:
  58.                 print(f"Error: ya existe el plato '{nombre_plato}'")
  59.             else:
  60.                 conn.commit()
  61.         else:
  62.             print("No existen categorías de platos")  
  63.  
  64.  
  65.  
  66. def mostrar_menu():
  67.     query = "SELECT categorias.id, categorias.nombre, platos.id, platos.nombre FROM categorias\
  68.             LEFT JOIN platos\
  69.             ON platos.id_categoria = categorias.id\
  70.             ORDER BY categorias.id,platos.id"
  71.     cursor.execute(query)
  72.     platos = cursor.fetchall()
  73.     if platos:
  74.         print("\nID  categoria       ID plato    ")
  75.         print("----------------------------------")
  76.         for plato in platos:
  77.             print()
  78.             for elemento in plato:
  79.                 if isinstance(elemento,str):
  80.                     print("{:<12}".format(elemento), end= " ")
  81.                 elif isinstance(elemento,int):
  82.                     print("{:^3}".format(elemento), end= " ")
  83.         print()
  84.     else:
  85.         print("No hay platos en el menu")
  86.  
  87.  
  88.  
  89.  
  90. conn = sqlite3.connect("restaurante.db")
  91. cursor = conn.cursor()
  92.  
  93. while True:
  94.     print(mostrar_opciones())
  95.     opcion = input("Seleccione una opción: ")
  96.    
  97.     if opcion == "1":
  98.         agregar_categoria(input("Ingrese el nombre de la categoría: "))
  99.        
  100.     elif opcion == "2":
  101.         agregar_plato()
  102.        
  103.     elif opcion == "3":
  104.         mostrar_menu()
  105.        
  106.     elif opcion == "4":
  107.         print("Cerrando conexión a la base de datos...")
  108.         conn.close()
  109.         break
  110.        
  111.     else:
  112.         print("Opción incorrecta")
RAW Paste Data