代码之家  ›  专栏  ›  技术社区  ›  workmad3

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

  •  0
  • workmad3  · 技术社区  · 15 年前

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

    我的问题是,现在我需要将整个表映射到内存中的一个数组属性,并努力找出这是否可能,如果可能,如何使用sqlacalchemy。如果不是的话,我仍然可以更改代码中的数据结构(尽管不太理想),但我宁愿不更改。

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

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

    1 回复  |  直到 15 年前
        1
  •  1
  •   muhuk    15 年前

    你好像想要什么

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

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

    理想情况下,您应该有两个到这两个表的映射。如果您不想在其他任何地方访问第二个映射,这无关紧要。 work 映射应该有一对多的关系 variant 映射。这会给你一份 变体 与特定实例关联的实例 工作 无论你定义了什么样的关系。