首页 > 解决方案 > Python 数据类映射到 SQL Alchemy

问题描述

我正在尝试将数据类映射到 SQL Alchemy声明性表,但是当我尝试实例化数据类对象时,出现以下错误:

sqlalchemy.exc.NoReferencedTableError: Foreign key associated with column 'runs.experiment_uuid' could not find table 'experiments' with which to generate a foreign key to target column 'experiment_uuid'

SQL Alchemy 表定义:

class Experiment(Base):

    __tablename__ = "experiments"
    __table_args__ = {"schema": "test"}

    experiment_id = Column(Integer, unique=True)
    experiment_uuid = Column(Text, unique=True, primary_key=True)
    experiment_config = Column(JSONB)
    creation_date = Column(TIMESTAMP)

    runs = relationship("Run", lazy="select")


class Run(Base):
    __tablename__ = "runs"
    __table_args__ = {"schema": "test"}

    run_id = Column(Integer, unique=True)
    run_uuid = Column(Text, unique=True, primary_key=True)
    experiment_uuid = Column(Text, ForeignKey(
            "experiments.experiment_uuid"))
    run_time = Column(TIMESTAMP)
    user_metadata = Column(JSONB, nullable=True)

    explanations = relationship("Explanation", lazy="select")

数据类:

@dataclass
class Experiment:
    experiment_uuid: str
    experiment_config: dict
    creation_date: datetime


@dataclass
class Run:
    run_uuid: str
    experiment_uuid: str
    run_time: datetime
    user_metadata: dict

映射:

from sqlalchemy.orm import mapper
mapper(Experiment, db_schema.Experiment.__table__)
mapper(Run, db_schema.Run.__table__)

最后,当我尝试实例化和实验时,我得到了错误:

self.experiment = Experiment(
        experiment_uuid=str(uuid.uuid1()),
        experiment_config=self.config,
        creation_date=datetime.now().timestamp()
        )

标签: pythonpostgresqlsqlalchemypython-dataclasses

解决方案


推荐阅读