質問

現在のプロジェクトで、メモリに複雑なデータ構造を保存するためのいくつかのクラスと、同じデータをデータベースに保存するための完成した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つのテーブルに2つのマッピングが必要です。別の場所で2番目のマッピングにアクセスしなくてもかまいません。 work マッピングは、 variant マッピングと1対多の関係を持つ必要があります。これにより、リレーションシップを定義する属性の特定の work に関連付けられた variant インスタンスのリストが表示されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top