1. ホーム
  2. python

[解決済み] マップされたテーブルの主キー列を組み立てられませんでした。

2022-02-09 09:33:57

質問

データベーススキーマの移行を作成しようとすると、このような奇妙なエラーが発生します。何が問題なのか、ご教授願えませんでしょうか。

$ python app.py db upgrade
[skipped]
sqlalchemy.exc.ArgumentError: Mapper Mapper|EssayStateAssociations|essay_associations could not assemble any primary key columns for mapped table 'essay_associations'

私のモデル

class EssayStateAssociations(db.Model):
    __tablename__ = 'essay_associations'

    application_essay_id = db.Column(
        db.Integer,
        db.ForeignKey("application_essay.id"),
        primary_key=True),
    theme_essay_id = db.Column(
        db.Integer,
        db.ForeignKey("theme_essay.id"),
        primary_key=True),
    state = db.Column(db.String, default="pending")

解決方法は?

1つのテーブルで2つの主キーを持つことはできません。代わりに、複合主キーを使用する必要があります。 これを行うには PrimaryKeyConstraint の括弧を閉じる前にカンマを追加することを忘れないでください)。 __table_args__ :

from db import PrimaryKeyConstraint

class EssayStateAssociations(db.Model):
    __tablename__ = 'essay_associations'
    __table_args__ = (
        PrimaryKeyConstraint('application_essay_id', 'theme_essay_id'),
    )

    application_essay_id = db.Column(
        db.Integer,
        db.ForeignKey("application_essay.id"))
    theme_essay_id = db.Column(
        db.Integer,
        db.ForeignKey("theme_essay.id"))
    state = db.Column(db.String, default="pending")