我正在使用SQLAlchemy查询许多类似的表,并合并结果。这些表是客户信息的行,但我们当前的数据库将其结构化,使不同的客户组都在各自的表中,例如client_group1、client_group2、client_group3:
client_group1:
| id | name | email |
| 1 | john | johnsmith@gmail.com |
| 2 | greg | gregjones@gmail.com |
其他每个表都有相同的列。如果我使用的是SQLAlchemy declarative_base,我可以为client_group1创建一个类,如下所示:
^{pr2}$然后我可以执行以下查询:
session.query(ClientGroup1.name)
但是,如果我使用union_all将一组客户机表组合到一个视口中,例如:
query1 = session.query(ClientGroup1.name)
query2 = session.query(ClientGroup2.name)
viewport = union_all(query1, query2)
然后,我不确定如何将视口映射到对象,而是必须使用以下命令访问视口列:
viewport.c.name
有没有方法可以将视口映射到特定的表结构?特别是考虑到每个类都指向不同的uu table_uname_u
阅读Concrete Table Inheritance文档,了解如何做到这一点。下面的代码是如何做到这一点的一个运行示例:
上面的示例还有一个额外的好处,您还可以创建新对象,以及只查询一些表。在
您可以将
SQL VIEW
映射到一个类,但是需要显式地指定一个主键(请参见Is possible to mapping view with class using mapper in SqlAlchemy?)。在您的情况下,恐怕这可能行不通,因为在多个表中有相同的PK值,使用多列PK可能不是最好的主意。在相关问题 更多 >
编程相关推荐