
webmaaron
1
Zeta
Verificado
Verificación en dos pasos activada
Verificado por Whatsapp
¡Ha verificado su Paypal!
Verificado por Binance
¡Usuario popular!
Suscripción a IA
Buenas tardes,
A ver si alguien me puede iluminar por que me estoy volviendo un poco loco.
Esta es la función en cuestión:
Tengo una serie de artículos en una base de datos de Mysql, estos tienen un campo publicado (0 no publicado, 1 publicado) y una categoría (Además de titulo etcs...)
Lo que hago es una vez que se publica un articulo guardo la categoría en una lista 'cat' y cuando se vaya a pedir el siguiente articulo, que sea de diferente categoría que los que están en la lista. (La lista tiene un máximo de cinco artículos).
Las categorías contienen algunas espacios y tildes.
El script básicamente si no hay una categoría en la lista, saca uno aleatorio. Si hay alguna categoría (que seria ya el segundo registro) debería ejecutar la consulta con el NOT IN para que no salga de las categorías de la lista. Y si no hay items que estén fuera de las categorías de la lista, saca uno aleatorio.
El caso es que esta repitiendo las categorías, es decir, en la lista guarda [`Casa, Casa'] cuando hay artículos de otras categorías. En cambio si pido que me haga el print por pantalla de la consulta SQL que envia, es correcta:
A ver si alguien me puede decir que estoy haciendo mal por que me estoy volviendo loco con esto.
Un saludo y gracias!
Aaron
A ver si alguien me puede iluminar por que me estoy volviendo un poco loco.
Esta es la función en cuestión:
Python:
def obtener_articulo_aleatorio(cursor, date, cat):
if cat:
query = "SELECT * FROM datos WHERE publicado = 0 AND date = '%s' AND categoria NOT IN (%s) ORDER BY RAND() LIMIT 1"
categorias_string = ','.join(["'{}'".format(c) for c in cat])
params = (date.today(), categorias_string)
else:
query = "SELECT * FROM datos WHERE publicado = 0 AND date = %s ORDER BY RAND() LIMIT 1"
params = (date.today(),)
cursor.execute(query, params)
record = cursor.fetchone()
if record is None and cat:
cursor.execute("SELECT * FROM datos WHERE publicado = 0 AND date = %s ORDER BY RAND() LIMIT 1", (date.today(),))
record = cursor.fetchone()
return record
Tengo una serie de artículos en una base de datos de Mysql, estos tienen un campo publicado (0 no publicado, 1 publicado) y una categoría (Además de titulo etcs...)
Lo que hago es una vez que se publica un articulo guardo la categoría en una lista 'cat' y cuando se vaya a pedir el siguiente articulo, que sea de diferente categoría que los que están en la lista. (La lista tiene un máximo de cinco artículos).
Las categorías contienen algunas espacios y tildes.
El script básicamente si no hay una categoría en la lista, saca uno aleatorio. Si hay alguna categoría (que seria ya el segundo registro) debería ejecutar la consulta con el NOT IN para que no salga de las categorías de la lista. Y si no hay items que estén fuera de las categorías de la lista, saca uno aleatorio.
El caso es que esta repitiendo las categorías, es decir, en la lista guarda [`Casa, Casa'] cuando hay artículos de otras categorías. En cambio si pido que me haga el print por pantalla de la consulta SQL que envia, es correcta:
SQL:
SELECT * FROM datos WHERE publicado = 0 AND date = 2023-07-17 AND categoria NOT IN ('Casa y jardín','Casa y jardín') ORDER BY RAND() LIMIT 1
A ver si alguien me puede decir que estoy haciendo mal por que me estoy volviendo loco con esto.
Un saludo y gracias!
Aaron