estoy usando ORM de SQL Alquimia y me encuentro cuando vuelva una sola columna que tenga los resultados, así:SQL Alchemy ORM devolver una sola columna, la forma de evitar el procesamiento posterior común
[(result,), (result_2,)] # etc...
con un conjunto como esto me parece que tengo que hacer esto a menudo:
results = [r[0] for r in results] # So that I just have a list of result values
esto no es tan "malo" porque mis conjuntos de resultados suelen ser pequeñas, pero si no eran esto podría agregar una sobrecarga significativa. Lo más importante es que siento que desordena la fuente, y perder este paso es un error bastante común que me encuentro.
¿Hay alguna forma de evitar este paso adicional?
Un relaciona a un lado: Este comportamiento de la ORM parece inconveniente en este caso, pero otro caso en el que mi conjunto de resultados era, [(id, valor)] que termina así:
[(result_1_id, result_1_val), (result_2_id, result_2_val)]
que entonces puede hacerlo:
results = dict(results) # so I have a map of id to value
Tiene la ventaja de tener sentido como un paso útil después de devolver los resultados.
Lo que tienes es un problema o estoy simplemente ser un nitpick y el procesamiento posterior después de obtener el conjunto de resultados tiene sentido para ambos casos? Estoy seguro de que podemos pensar en algunas otras operaciones comunes de procesamiento posterior para hacer que el conjunto de resultados sea más útil en el código de la aplicación. ¿Existe un alto rendimiento y soluciones convenientes en todos los ámbitos o es inevitable el procesamiento posterior, y simplemente se requiere para diferentes usos de aplicaciones?
Cuando mi aplicación puede aprovechar los objetos devueltos por SQL Alchemy's ORM parece extremadamente útil, pero en los casos en que no puedo o no puedo, no tanto. ¿Es este solo un problema común de los ORM en general? ¿Será mejor que no use la capa ORM en casos como este?
supongo que debería mostrar un ejemplo de las consultas ORM reales que estoy hablando:
session.query(OrmObj.column_name).all()
o
session.query(OrmObj.id_column_name, OrmObj.value_column_name).all()
Por supuesto, en una consulta real hay normalmente habría alguna filtros, etc.
Sí, estoy de acuerdo, las NamedTuples no son inmediatamente obvias. Mi proceso de publicación más común todavía tiene que crear un diccionario de algún tipo. La mayor parte de mi postprocesamiento se eliminó mediante una mejor arquitectura de la base de datos y el uso de SQLAlchemy, así que tengo los valores que necesito adjuntar a los objetos ORM, o disponibles a través de los métodos. –