python - 有没有办法在 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为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)
,具体取决于您使用的内容。
推荐阅读
- phrets - Phrets出售的数据不下载图像似乎超时
- javascript - $(this) 指的是 $(window) 而不是 .click() 方法内的单击元素
- javascript - React Hooks:隐藏/显示其他组件的元素
- django - 如何像另存为按钮一样下载导出 csv 文件(从 ajax 请求发送数据)
- android - 当用户单击任何图像视图时,如何获取回收器视图项目的所有图像视图背景颜色?
- c++ - 如何理解 T& 和 T const& 的偏序规则
- python - 使用多处理 python 有效地调整批量 numpy 图像的大小
- javascript - GoJS 将节点从组拖到图表中
- c# - 可以通过 Property Accessor 识别 PropertyInfo
- javascript - 尝试使用 jQuery/JavaScript 构建递归函数