Python SQLAlchemy从三个表中找到唯一的记录



我有三个表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个表执行上述操作,并将其放入同一词典中。然后通过在字典中查找电子邮件地址密钥来访问期望的角色。

最新更新