我有三个表admin、doctor和manager,它们没有公共值,每个表都有一个电子邮件列,但由于电子邮件是唯一的,因此没有公共值。
我想在SQLAlchemy中写一个查询,它连接三个表,然后我可以根据用户提供的电子邮件过滤三个虚拟电子邮件列。
表管理员
- id(唯一(
- 电子邮件(唯一(
- 名称(唯一(
台式刮刀
- id(唯一(
- 电子邮件(唯一(
- doctorName(唯一(
表管理器
- id(唯一(
- 电子邮件(唯一(
- managerName(唯一(
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.email==user_provided_email的管理表,或doctor.email==user_provied_email的医生表,或manager.email==user.provided_email-的经理表
results对象将只包含一行。
感谢
您可以构建一个字典,使用电子邮件作为键,使用角色作为值。
email_role_dictionary = {}
query_objects = session.query(admin).all
for object in query_objects:
email_role_dictionary[object.email] = 'admin'
对所有3个表执行上述操作,并将其放入同一词典中。然后通过在字典中查找电子邮件地址密钥来访问期望的角色。