我在当前项目中遇到过一个地方,我创建了几个用于在内存中存储复杂数据结构的类,以及一个用于在数据库中存储相同数据的完整SQL模式。我决定使用SQLAlchemy作为ORM层,因为它似乎是我可以根据我的需求量身定制的最灵活的解决方案。

我的问题是我现在需要将整个表映射到内存中的一个数组属性,并且很难找出这是否可能,如果是,那么如何使用SQLAlchemy进行操作。我仍然可以在代码中更改数据结构(尽管不是理想的),但如果没有,我宁愿不这样做。

使用以下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 ;

这只是整个数据库的一小部分,在几个地方也需要同样的东西。

有帮助吗?

解决方案

似乎你想要像

这样的东西
work_instance.variants = [<some iterable of variants>]

如果没有,请在你的问题中澄清。

理想情况下,这两个表应该有2个映射。如果你不在其他任何地方访问第二个映射都没关系。 work 映射应与 variant 映射具有一对多的关系。这将为您提供与您定义关系的任何属性上的特定 work 关联的 variant 实例的列表。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top