簡體   English   中英

有沒有辦法在 SQLAlchemy 上從多個表中填充一個表

[英]Is there a way to populate one table from multiple on SQLAlchemy

我正在嘗試使用 SQLAlchemy 構建一個數據庫,我的問題是我有兩個具有相同列名的表,並試圖從其他兩個表中填充第三個表。 下面有一個簡單的圖表來說明:

這是圖片

我通常在一張表上設置外鍵,在另一張表上設置關系,如下所示:

class TableA(Base):
    __tablename__ = "tableA"
    id = Column(Integer, primary_key=True)
    name = Column(String(100))
    age = Column(Integer)
    name_relation = relationship("TableC", backref='owner')

class TableC(Base):
    __tablename__ = "tableC"
    id = Column(Integer, primary_key=True)
    name = Column(String(100), ForeignKey('tableA.name'))
    age = Column(Integer)

可以看到這個方法只能對兩個表起作用,因為我在tableC上的ForeignKey for the name指定了tableA的名字。

有沒有辦法做到這一點 ?

謝謝

在 SQL 中,您要查找的查詢是

INSERT INTO C (id, name, age) (
  SELECT *
  FROM A
  UNION ALL
  SELECT *
  FROM B
)

根據這個答案,這使得等效的 SQLAlchemy

session = Session()
query = session.query(TableA).union_all(session.query(TableB))
stmt = TableC.insert().from_select(['id', 'name', 'age'], query)

或等效地

stmt = TableC.insert().from_select(
  ['id', 'name', 'age'],
  TableA.select().union_all(TableB.select())
)

之后,您可以使用connection.execute(stmt)session.execute(stmt)執行它,具體取決於您使用的內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM