将数据库表映射到对象的属性

2024-04-24 05:42:00 发布

您现在位置:Python中文网/ 问答频道 /正文

在我当前的项目中,我遇到了一个地方,我创建了几个类,用于在内存中存储复杂的数据结构,并创建了一个完整的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 ;

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


Tags: key内存id数据库数据结构sqlindexsqlalchemy
1条回答
网友
1楼 · 发布于 2024-04-24 05:42:00

你好像想要

work_instance.variants = [<some iterable of variants>]

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

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

相关问题 更多 >