[英]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.