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

Python 将数据库表映射到对象的属性,python,database,orm,sqlalchemy,Python,Database,Orm,Sqlalchemy,我在当前项目中遇到了一个地方,我创建了几个类,用于在内存中存储复杂的数据结构,并创建了一个完整的SQL模式,用于在数据库中存储相同的数据。我决定使用SQLAlchemy作为ORM层,因为它似乎是我可以根据需要定制的最灵活的解决方案 我的问题是,我现在需要将整个表映射到内存中的一个数组属性,并努力找出这是否可行,如果可行,如何使用SQLAlchemy实现。如果没有,我仍然可以更改代码中的数据结构(尽管不太理想),但我更愿意不这样做 该表是使用以下SQL创建的: CREATE TABLE `work

我在当前项目中遇到了一个地方,我创建了几个类,用于在内存中存储复杂的数据结构,并创建了一个完整的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>]
work\u instance.variants=[]
如果没有,请在问题中澄清


理想情况下,您应该有两个到这两个表的映射。如果您不在其他任何地方访问第二个映射,这并不重要<代码>工作映射应与
变量
映射具有一对多关系。这将为您提供一个与特定
工作
相关联的
变量
实例列表,无论您在哪个属性上定义您的关系。

这听起来很像我想要的。有没有一种方法可以做到这一点,而不必为变体专门设置python类?或者我应该放弃,为这些元素中的每一个都创建一个类,尽管它们很简单吗?SQLAlchemy ORM不需要类。您可以只查询一个没有ORM映射的表。可以使用显式fetchall()获取所有行;你会得到一个字典列表。S.Lott是对的,你不必为每个表都设置一个类。但无论如何我都会创造它们。在代码中的某个地方,您可能希望对变体进行操作,您可能会发现,拥有映射比在工作映射上附加功能更为实际。我最终选择了一个(完全重构的)模型,其中包含变体类(使用elixir创建),但最终结果是muhuk所描述的。