cte*_*nar 6 python join sqlalchemy
假设有两个 SQL 表
objects_stock
id | number
Run Code Online (Sandbox Code Playgroud)
和
objects_prop
id | obj_id | color | weight
Run Code Online (Sandbox Code Playgroud)
应该连接在 上objects_stock.id=objects_prop.obj_id
,因此普通的 SQL 查询读取
select * from objects_prop join objects_stock on objects_stock.id = objects_prop.obj_id;
Run Code Online (Sandbox Code Playgroud)
如何使用 SqlAlchemy 执行此查询,以便可以访问此连接的所有返回列?当我执行时
query = session.query(ObjectsStock).join(ObjectsProp, ObjectsStock.id == ObjectsProp.obj_id)
results = query.all()
Run Code Online (Sandbox Code Playgroud)
通过ObjectsStock
适当ObjectsProp
的映射类,列表results
包含类型的对象ObjectsStock
- 这是为什么?要访问与两个表的列相对应的所有字段,正确的 SqlAlchemy 查询是什么?
以防万一有人遇到类似的问题:到目前为止我发现的最好方法是列出要显式获取的列,
query = session.query(ObjectsStock.id, ObjectsStock.number, ObjectsProp.color, ObjectsProp.weight).\
select_from(ObjectsStock).join(ObjectsProp, ObjectsStock.id == ObjectsProp.obj_id)
results = query.all()
Run Code Online (Sandbox Code Playgroud)
然后可以迭代结果并通过原始列名称访问属性,例如
for r in results:
print(r.id, r.color, r.number)
Run Code Online (Sandbox Code Playgroud)