私は実験的なプロトコル用のテーブルを持っています。これには他の多くのテーブルのための外部キーが含まれています(最も顕著なのはIncubation
のエントリです)。構造はそのまま、次のようになります。SQLAlchemyのすべての関連テーブルを結合する
class DNAExtractionProtocol(Base):
__tablename__ = 'dna_extraction_protocols'
id = Column(Integer, primary_key=True)
code = Column(String, unique=True)
name = Column(String)
sample_mass = Column(Float)
mass_unit_id = Column(String, ForeignKey('measurement_units.id'))
mass_unit = relationship("MeasurementUnit", foreign_keys=[mass_unit_id])
digestion_buffer_id = Column(String, ForeignKey("solutions.id"))
digestion_buffer = relationship("Solution", foreign_keys=[digestion_buffer_id])
digestion_buffer_volume = Column(Float)
digestion_id = Column(Integer, ForeignKey("incubations.id"))
digestion = relationship("Incubation", foreign_keys=[digestion_id])
lysis_buffer_id = Column(String, ForeignKey("solutions.id"))
lysis_buffer = relationship("Solution", foreign_keys=[lysis_buffer_id])
lysis_buffer_volume = Column(Float)
lysis_id = Column(Integer, ForeignKey("incubations.id"))
lysis = relationship("Incubation", foreign_keys=[lysis_id])
proteinase_id = Column(String, ForeignKey("solutions.id"))
proteinase = relationship("Solution", foreign_keys=[proteinase_id])
proteinase_volume = Column(Float)
inactivation_id = Column(Integer, ForeignKey("incubations.id"))
inactivation = relationship("Incubation", foreign_keys=[inactivation_id])
cooling_id = Column(Integer, ForeignKey("incubations.id"))
cooling = relationship("Incubation", foreign_keys=[cooling_id])
centrifugation_id = Column(Integer, ForeignKey("incubations.id"))
centrifugation = relationship("Incubation", foreign_keys=[centrifugation_id])
volume_unit_id = Column(String, ForeignKey('measurement_units.id'))
volume_unit = relationship("MeasurementUnit", foreign_keys=[volume_unit_id])
、ユニークcode
帰属与え、私はパンダのデータフレームを取得したいと思います(というかシリーズ)私はの属性だけでなくいずれかを選択することができます"dna_extraction_protocols"
テーブル内の対応するエントリだけでなく、関連するテーブルも参照してください。
は、私は現在でパンダのデータフレームを選択しています:
sql_query = session.query(DNAExtractionProtocol).join(DNAExtractionProtocol.digestion_buffer).filter(DNAExtractionProtocol.code == code)
for item in sql_query:
pass
mystring = str(sql_query)
mydf = pd.read_sql_query(mystring,engine,params=[code])
print(mydf)
しかし、これは私だけが関連するキーのIDを選択することができます。私はmydf["dna_extraction_protocols_mass_unit_id"]
を選択することができます - しかし、私はまたmydf["dna_extraction_protocols_mass_unit_long_name"]
を選択できるようにしたいと思い、"measurement_units"
テーブルの上に以下の利用可能なキー与えられた:そのような質問に
class MeasurementUnit(Base):
__tablename__ = "measurement_units"
id = Column(Integer, primary_key=True)
code = Column(String, unique=True)
long_name = Column(String)
siunitx = Column(String)
ありがとうございます、それはすでに大きな前進ですが、 'measurement_units'テーブルは単なる一例にすぎません。私は自分のエントリがリンクしているすべてのテーブルに参加したいと思います。 - 手で指定する必要はありません。これは可能ですか? – TheChymera
これはquerryのようです: 'sql_query = session.query(tables [table])。オプション(eagerload(tables [table] .digestion_buffer))フィルタ(tables [table] .code == code)'関連するテーブルをそれぞれ確保する必要がありますか? – TheChymera
ビュー内の巨大なselectステートメントに必要なすべてのテーブルを指定します。一度。高速なデータアクセスが柔軟性よりも重要である場合、ビューを取得し、その結果を大きなテーブルに格納することによって、ビューをマテリアル化することができます。 – holdenweb