使用 SqlAlchemy 访问连接表的所有列值

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 查询是什么?

cte*_*nar 5

以防万一有人遇到类似的问题:到目前为止我发现的最好方法是列出要显式获取的列,

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)