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
S M Tasfiqul Asif
11,514 PuntosObteniendo AttributeError: 'Query' object has no attribute 'title
Estoy obteniendo un error AttributeError: el objeto 'Query' no tiene el atributo 'title.
enlace del repositorio de github: https://github.com/Tasfiq23/library_database.git
código:
id_options =
para libro en sesión.query(Libro):
id_options.append(libro.id)
id_error= Verdadero
while id_error:
id_choice=input(f'''
\nOpciones de Id: {id_options}
\rId del libro: ''')
id_choice = clean_id(id_choice,id_options)
if type(id_choice) == int:
id_error=False
the_book = sesión.query(Libro).filtro(Libro.id==id_choice)
print(f'''\n{the_book.title} por {the_book.author} \rPublicado:{the_book.published_date} \rPrecio: ${the_book.price/100}''')
[MOD: formato ```python añadido -cf]
3 Respuestas
Chris Freeman
68,469 puntosHola S M Tasfiqul Asif, una consulta que devuelve un solo elemento sigue siendo una objeto de consulta y no ese elemento.
Antes en el código, hay un bucle sobre un resultado de consulta for book in session.query(Book):. Esto funciona porque un objeto de consulta es iterable. Usar un filtro aún resulta en un objeto de consulta incluso si se encuentra exactamente un elemento.
Una verificación rápida para probar si este es el problema:
- add 0 al final de la consulta, de modo que
the_bookse asigna al primer resultado. Este truco no es robusto, porque si el objeto de consulta está vacío genera unIndexError. Pero mostrará si este es el problema.
the_book = sesión.query(Libro).filtro(Libro.id==id_choice)[0]
Vuelve a publicar si necesitas más ayuda. ¡Buena suerte!
S M Tasfiqul Asif
11,514 PuntosHola Chris,
class Libro(Base):
__tablename__ = 'books'
id = Column(Integer,primary_key= Verdadero)
title = Column('Title',Cadena)
autor = Column('Author',Cadena)
published_date = Column('Published',Fecha)
precio = Column('Price',Integer)
def __repr__(self):
return f'Title: {self.title} Author : {self.author} Published : {self.published_date} Price : {self.price},'
Además, ejecuté el código agregando [0] al final de la consulta y el resultado que estoy obteniendo es
"Price: $29.997-10-25 Bader ".
Nota: La primera entrada en mi base de datos es,
1|Python Tricks|Dan Bader|2017-10-25|2999
Entonces eso significa que solo muestra el precio, la fecha y el apellido del autor, lo cual es aún más confuso para mí. ¿por qué no se imprime con todos los detalles?
print(f'''\n{the_book.title} por {the_book.author} \rPublicado:{the_book.published_date} \rPrecio: ${the_book.price/100}''')
Chris Freeman
68,469 puntosNo es obvio, pero la cadena f está usando \r (retorno) en lugar de \n (nueva línea) esto causa que los caracteres se sobrescriban.
S M Tasfiqul Asif
11,514 PuntosHola Chris, ahora entiendo y funciona. Muchas gracias. :D