Mapper une table de base de données sur un attribut d'un objet
-
08-07-2019 - |
Question
J'ai trouvé dans mon projet actuel un endroit où j'ai créé plusieurs classes pour stocker une structure de données complexe en mémoire et un schéma SQL complet pour stocker les mêmes données dans une base de données. J'ai décidé d'utiliser SQLAlchemy en tant que couche ORM, ce qui semble être la solution la plus flexible que je puisse adapter à mes besoins.
Mon problème est que je dois maintenant mapper une table entière sur un attribut de tableau en mémoire et j'ai du mal à savoir si cela est possible et, le cas échéant, comment procéder avec SQLAlchemy. Il m'est toujours possible de changer les structures de données en code (bien que moins qu'idéal) sinon, mais je préférerais ne pas le faire.
La table en question est créée à l'aide du code SQL suivant:
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 ;
Il ne s'agit que d'une petite partie de la base de données complète et la même chose sera nécessaire à plusieurs endroits.
La solution
Il semble que vous souhaitiez quelque chose comme
work_instance.variants = [<some iterable of variants>]
Si ce n'est pas le cas, veuillez préciser votre question.
Idéalement, vous devriez avoir 2 correspondances à ces 2 tables. Peu importe si vous n'accéderez pas à la deuxième cartographie ailleurs. Le mappage work
doit avoir une relation un-à-plusieurs avec le mappage variant
. Cela vous donnerait une liste d'instances variant
associées à un travail
particulier, quel que soit l'attribut pour lequel vous définissez votre relation.