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

时间:2021-05-28 16:04:46

标签: python flask sqlalchemy

我有三个表 admin、doctor、manager,它们没有共同的值,每个表都有一个 email 列,但由于电子邮件是唯一的,所以没有共同的值。

我想在 SQLAlchemy 中编写一个连接三个表的查询,然后我可以根据用户提供的电子邮件过滤三个虚拟电子邮件列。

表管理员

  • id(唯一)
  • 电子邮件(唯一)
  • 名称(唯一)

表医生

  • id(唯一)
  • 电子邮件(唯一)
  • 医生姓名(唯一)

表管理员

  • 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 表,其中 admin.email == user_provided_email 或医生表,其中 doctor.email == user_provided_email 或 manager 表,其中 manager.email == user_provided_email

结果对象将只包含一行。

谢谢

1 个答案:

答案 0 :(得分:0)

您可以构建一个字典,以电子邮件为键,以角色为值。

email_role_dictionary = {}

query_objects = session.query(admin).all
for object in query_objects:
    email_role_dictionary[object.email] = 'admin'

对所有 3 个表执行上述操作,放入同一个字典中。然后通过在字典中查找电子邮件地址键来访问所需的角色。

相关问题