Asignación de una tabla de base de datos a un atributo de un objeto
-
08-07-2019 - |
Pregunta
Me he encontrado con un lugar en mi proyecto actual donde he creado varias clases para almacenar una estructura de datos complicada en la memoria y un esquema SQL completo para almacenar los mismos datos en una base de datos. Decidí usar SQLAlchemy como una capa ORM, ya que parece la solución más flexible que puedo adaptar a mis necesidades.
Mi problema es que ahora necesito asignar una tabla completa a solo un atributo de matriz en la memoria y estoy luchando por descubrir si esto es posible y, si es así, cómo hacerlo con SQLAlchemy. Todavía es posible para mí cambiar las estructuras de datos en el código (aunque menos que lo ideal) si no, pero preferiría no hacerlo.
La tabla en cuestión se crea utilizando el siguiente SQL:
CREATE TABLE `works` (
`id` BIGINT NOT NULL auto_increment,
`uniform_title` VARCHAR(255) NOT NULL,
`created_date` DATE NOT NULL,
`context` TEXT,
`distinguishing_characteristics` TEXT,
PRIMARY KEY (`id`),
INDEX (`uniform_title` ASC),
INDEX (`uniform_title` DESC)
) ENGINE = InnoDB DEFAULT CHARSET = utf8 ;
CREATE TABLE `variant_work_titles` (
`id` BIGINT NOT NULL auto_increment,
`work_id` BIGINT NOT NULL,
`title` VARCHAR(255) NOT NULL,
PRIMARY KEY(`id`),
INDEX (`work_id`),
INDEX (`title` ASC),
INDEX (`title` DESC),
FOREIGN KEY (`work_id`)
REFERENCES `works` (`id`)
ON DELETE CASCADE
ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
Esta es solo una pequeña parte de la base de datos completa y se requerirá lo mismo en varios lugares.
Solución
Parece que quieres algo como
work_instance.variants = [<some iterable of variants>]
Si no, por favor aclare en su pregunta.
Idealmente, debería tener 2 asignaciones a estas 2 tablas. No importa si no accederá a la segunda asignación en ningún otro lugar. El mapeo work
debe tener una relación de uno a muchos con el mapeo variant
. Esto le daría una lista de instancias de variante
asociadas con un trabajo
particular en cualquier atributo que defina su relación.