リレーションシップで定義されたテーブルがあり、クエリで結合を使用していなくても、情報が取得されることに気付きました。
class Employee(Base):
__tablename__ = "t_employee"
id = Column(Identifier(20), Sequence('%s_id_seq' % __tablename__), primary_key=True, nullable=False)
jobs = relationship("EmployeeJob")
roles = relationship("EmployeeRole")
class EmployeeJob(Base):
__tablename__ = "t_employee_job"
id = Column(Integer(20), Sequence('%s_id_seq' % __tablename__), primary_key=True, nullable=False)
employee_id = Column(Integer(20), ForeignKey('t_employee.id', ondelete="CASCADE"), primary_key=True)
job_id = Column(Integer(20), ForeignKey('t_job.id', ondelete="CASCADE"), primary_key=True)
class EmployeeRole(Base):
__tablename__ = "t_employee_role"
id = Column(Integer(20), Sequence('%s_id_seq' % __tablename__), primary_key=True, nullable=False)
employee_id = Column(Integer(20), ForeignKey('t_employee.id', ondelete="CASCADE"), nullable=False)
location_id = Column(Identifier(20), ForeignKey('t_location.id', ondelete="CASCADE"))
role_id = Column(Integer(20), ForeignKey('t_role.id', ondelete="CASCADE"), nullable=False)
session.query(Employee).all()
ロールとジョブも取得しますが、各行のデータベースにクエリを実行して取得します。
この状況について 2 つの質問があり
ます。 1. パフォーマンスの観点から、参加は自分で行うべきだと思います。私は正しいですか?
2. テーブルを特定のデータ構造にマップするにはどうすればよいですか? たとえば、各ロールをロケーション ID とロール ID の配列で表す必要があるロールを持つ従業員のリストを取得したいとします。{id:1, jobs:[1,2,3], roles:[[1,1],[1,2],[2,3]]}