我有三个表 admin、doctor、manager,它们没有共同的值,每个表都有一个 email 列,但由于电子邮件是唯一的,所以没有共同的值。
我想在 SQLAlchemy 中编写一个连接三个表的查询,然后我可以根据用户提供的电子邮件过滤三个虚拟电子邮件列。
表管理员
表医生
表管理员
def get_role_by_user_email(email):
query = session.query(admin,
doctor,
manager
)\
.filter(admin.email == email)\
.filter(doctor.email == email)\
.filter(manager.email == email)\
.first()\
I am hoping the query will result in a unique row from three tables.
JOIN 不起作用,因为这三个表之间没有关于 ID 和电子邮件的公共记录。
在 SQL 术语中,这就是我想要实现的
results = admin 表,其中 admin.email == user_provided_email 或医生表,其中 doctor.email == user_provided_email 或 manager 表,其中 manager.email == user_provided_email
结果对象将只包含一行。
谢谢
答案 0 :(得分:0)
您可以构建一个字典,以电子邮件为键,以角色为值。
email_role_dictionary = {}
query_objects = session.query(admin).all
for object in query_objects:
email_role_dictionary[object.email] = 'admin'
对所有 3 个表执行上述操作,放入同一个字典中。然后通过在字典中查找电子邮件地址键来访问所需的角色。