cómo separar elementos agrupados en sqlite3 a través de python
He empezado a utilizar una base de datos para mi programa en lugar de archivos .txt y me gustaría hacer una función de búsqueda.
Ya tengo la idea básica de la función de búsqueda (menú desplegable con todas las opciones posibles), pero con la mayoría de los elementos hay múltiples elementos en 1 columna/fila, por ejemplo:
columna “nombre_comida” “Ingredientes” “receta”
patata gratinada patata, queso, etc.
Pero en mi función de búsqueda, “patata, queso” es un elemento, ¿cómo puedo separarlo?
Y mi segunda pregunta, obviamente va a haber alimentos con ingredientes similares, ¿cómo puedo evitar que muestre múltiples veces el mismo ingrediente y aún así mostrar el resultado de todos los alimentos con el mismo ingrediente?
from tkinter import *
from tkinter.ttk import Combobox
import sqlite3
con = sqlite3.connect("Food.db")
c = con.cursor()
c.execute("SELECT Ingredients FROM Dinner_Order")
order = c.fetchall()
c.execute("SELECT Ingredients FROM Dinner_Stove")
stove = c.fetchall()
c.execute("SELECT Ingredients FROM Dinner_Oven")
oven = c.fetchall()
c.execute("SELECT Ingredients FROM Dinner_Cold")
cold = c.fetchall()
c.execute("SELECT Ingredients FROM Dinner_Simple")
simple = c.fetchall()
con.commit()
dinner_order = order
dinner_stove = stove
dinner_oven = oven
dinner_cold = cold
dinner_simple = simple
ws = Tk()
ws.title("Guías de Python")
ws.geometry("200x200")
item_names = dinner_order + dinner_stove + dinner_oven + dinner_simple + dinner_cold
combo = Combobox(ws, state='readonly')
combo['values'] = item_names
combo.pack()
combo = Combobox(ws, state='readonly')
combo['values'] = item_names
combo.pack()
combo = Combobox(ws, state='readonly')
combo['values'] = item_names
combo.pack()
combo = Combobox(ws, state='readonly')
combo['values'] = item_names
combo.pack()
button = Button(ws, text="buscar")#command=search_items)
button.pack()
ws.mainloop()
davy.ai
Solución
Para separar los múltiples elementos de una columna, puedes usar un separador como una coma o un punto y coma. Por ejemplo, en la columna “Ingredientes”, puedes separar los ingredientes con una coma como “patata, queso, etc.”
Para buscar alimentos con ingredientes similares y evitar mostrar duplicados, puedes usar la palabra clave DISTINCT en tu consulta de búsqueda. Esto te devolverá una lista de ingredientes únicos sin duplicados.
Aquí tienes una versión actualizada de tu código que incluye una función de búsqueda que separa los ingredientes y evita los duplicados:
Este código separa los ingredientes por una coma, los agrega a una lista y luego crea otra lista con ingredientes únicos usando la función set().
En la función search_items(), la consulta SQL utiliza el operador LIKE para encontrar los alimentos que contienen los cuatro ingredientes seleccionados. La palabra clave DISTINCT devuelve solo los nombres de alimentos únicos.
¡Espero que esto te ayude!