我正在尝试使用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名称指定了tableA的名称。
有办法吗?
谢谢
答案 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)
执行它。