有没有办法在 SQLAlchemy 上从多个填充一个 table

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

我正在尝试使用 SQLAlchemy 构建数据库,我的问题是我有两个具有相同列名的 table,并试图从另外两个中填充第三个 table。下面有一个简单的图表来说明:

我通常在一个 table 上设置外键,在另一个上设置关系:

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)

你可以看到这个方法只能对两个table有效,因为我在tableC上的ForeignKey for the name指定了tableA的名字。

有办法吗?

谢谢

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

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

根据 this answer,这相当于 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) 执行它,具体取决于您使用的是什么。