python - remove - Creación dinámica de clases en SQLAlchemy
sqlalchemy query (1)
Puede crear MyObject
dinámicamente usando la llamada de 3 argumentos para type
:
type(name, bases, dict)
Return a new type object. This is essentially a dynamic form of the
class statement...
Por ejemplo:
mydict={''__tablename__'':stored[''tablename''],
''__table_args__'':{''autoload'':True},}
MyObj=type(stored[''objectname''],(Base,),mydict)
print(MyObj)
# <class ''__main__.MyObject''>
print(MyObj.__base__)
# <class ''__main__.Base''>
print(MyObj.__tablename__)
# my_internal_table_name
print(MyObj.__table_args__)
# {''autoload'': True}
Tenemos la necesidad de crear clases SQLAlchemy para acceder a múltiples fuentes de datos externas que aumentarán en número con el tiempo. Usamos la base declarativa para nuestros modelos de ORM principales y sé que podemos especificar manualmente las nuevas clases de ORM usando autoload = True para generar automáticamente la asignación.
El problema es que necesitamos poder generarlos dinámicamente tomando algo como esto:
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
stored={}
stored[''tablename'']=''my_internal_table_name''
stored[''objectname'']=''MyObject''
y convirtiéndolo en algo así dinámicamente:
class MyObject(Base):
__tablename__ = ''my_internal_table_name''
__table_args__ = {''autoload'':True}
No queremos que las clases persistan más tiempo del necesario para abrir una conexión, realizar consultas y luego cerrar la conexión. Por lo tanto, idealmente, podemos colocar los elementos en la variable "almacenada" de arriba en una base de datos y extraerlos según sea necesario. El otro desafío es que el nombre del objeto (por ejemplo, "MyObject") se puede usar en diferentes conexiones, por lo que no podemos definirlo una vez y mantenerlo.
Cualquier sugerencia sobre cómo esto podría lograrse sería muy apreciada.
Gracias...