Bienvenido a la Comunidad de Treehouse

¿Quieres colaborar en errores de código? ¿Tienes errores que necesitan comentarios? ¿Buscas un par de ojos adicionales en tu último proyecto? aquí.

¿Buscas aprender algo nuevo?

Treehouse ofrece una prueba gratuita de siete días para estudiantes nuevos. Obtén acceso a miles de horas de contenido y únete a miles de

Inicia tu prueba gratuita

Python Conceptos Básicos de SQLAlchemy Introducción a SQLAlchemy Consultando la Base de Datos de Películas

¿Algo mal con la consulta y el filtrado de sqlalchemy?

No sé qué estoy haciendo mal. Vi el video dos veces, leí la documentación y sigo atrapado. Estoy atrapado en la tarea 1.

models.py
from sqlalchemy import create_engine, Column, Integer, Cadena
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker


motor = create_engine('sqlite:///películas.db', eco=False)
Sesión = sessionmaker(vincular=motor)
sesión = Sesión()
Base = declarative_base()


class Película(Base):
    __tablename__ = 'películas'

    id = Column(Integer, primary_key=Verdadero)
    movie_title = Column(Cadena)
    género = Column(Cadena)

# Escribe tu código a continuación
romance_movies = sesión.query(Película).filter_by(Película.género==romance)
para película en romance_movies:
    print(película)
Chris Freeman
Chris Freeman
68,469 puntos

Lo que no sé es por qué el verificador permite ambos filter y filter_by como se encuentra en la expresión regular filter[_by]*, pero sí mantiene permite el Movie.genre formato permitido al usar filter. Señalando para obtener comentarios de los desarrolladores.

1 Respuesta

Chris Freeman
Chris Freeman
68,469 puntos

Estás muy cerca. El verificador de desafío quiere genre= en lugar de Movie.genre==y "Romance" en lugar de "romance"

Nota la diferencia en los casos a continuación (de la documentación). Uno usa filter, el otro usa filter_by:

# filtrar resultados, que se logra con filter_by(), que usa argumentos de palabra clave:

sql
>>> para name, en sesión.query(Usuario.name).\
...             filter_by(fullname='Ed Jones'):
...    print(name)
ed

# …o filter(), que usa construcciones de lenguaje de expresión SQL más flexibles. 
# Estos te permiten usar operadores regulares de Python con los atributos de nivel de clase en tu clase mapeada:

sql
>>> para name, en sesión.query(Usuario.name).\
...             filtro(Usuario.fullname=='Ed Jones'):
...    print(name)
ed

Vuelve si necesitas más ayuda. ¡Buena suerte!

Muchas gracias, Chris, eres un salvador. Pensé que filter y filter_by eran lo mismo porque cuando el desafío devolvió un "error", el mensaje decía "usa filter o filter_by" y lo entendí como cualquiera de los dos.