Escribo un pequeño shlalchemy shim para exportar datos desde una base de datos MySQL con algunas transformaciones de datos livianas, la mayoría de las veces cambiando los nombres de los campos. Mi secuencia de comandos actual funciona bien, pero necesito que describa básicamente mi modelo dos veces: una vez en la declaración de clase y una vez como una lista de nombres de campo para iterar.introspección SQLAlchemy de las clases declarativas
Estoy tratando de averiguar cómo usar la introspección para identificar propiedades en objetos de fila que son accesadores de columna. Las siguientes obras: casi perfectamente
for attr, value in self.__class__.__dict__.iteritems():
if isinstance(value, sqlalchemy.orm.attributes.InstrumentedAttribute):
self.__class__._columns.append(attr)
excepto que mis-a-muchos descriptores de acceso de relación son también ejemplos de sqlalchemy.orm.attributes.InstrumentedAttribute, y tengo que saltar aquellos. ¿Hay alguna manera de distinguir entre los dos mientras estoy inspeccionando el diccionario de la clase?
La mayor parte de la documentación que encuentro sobre introspección de sqlalchemy implica mirar metadata.table, pero desde que cambio el nombre de las columnas, esos datos no se pueden mapear trivialmente.
Esto parece ser más útil en general que inspeccionar metadata.tables ['mytable']. Columnas, pero no parece que me permita descubrir la variable de clase a la que se asigna el descriptor en mi clase de entidad, entonces Me queda el problema original de cómo producir un mapeo de salida de los nombres de propiedad de clase a sus valores. –