有没有一种方法可以从SQLAlchemy的多个表中填充一个表

时间:2020-10-28 08:58:18

标签: python database database-design sqlalchemy

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

Here is the picture

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

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名称指定了tableA的名称。

有办法吗?

谢谢

1 个答案:

答案 0 :(得分:0)

在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)执行它。