使用Django ORM进行复杂查询

2024-06-16 19:11:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在基于用户输入查询一个遗留的Postgres数据库,并通过django views.py文件输出它。我想通过Django ORM函数生成并执行查询

数据库的设置使每个记录都使用一个唯一的外键字段nct_id,该字段在所有表中都被引用。使用nct_id我想从我选择的各种表中提取需要的信息。目前,我可以使用原始SQL生成和执行查询

我试图通过Django ORM执行的原始SQL如下:

Master_Query = Studies.objects.raw('''

SELECT DISTINCT ON (Studies.nct_id) 
    Studies.nct_id, 
    Studies.overall_status, 
    Eligibilities.gender, 
    Eligibilities.criteria, 
    Conditions.conditions_name, 
    Facilities.city, 
    Facilities.country, 
    Facility_Contacts.fc_name,
    Facility_Contacts.email 

FROM Studies 
    INNER JOIN Eligibilities on Eligibilities.nct_id = Studies.nct_id 
    INNER JOIN Conditions on Conditions.nct_id = Studies.nct_id 
    INNER JOIN Facilities on Facilities.nct_id = Studies.nct_id 
    INNER JOIN Facility_Contacts on Facility_Contacts.nct_id = Studies.nct_id 

WHERE 
    ((Studies.overall_status LIKE 'Recruiting' OR Studies.overall_status LIKE 'Unknown status')) 
    AND ((Conditions.conditions_name LIKE %s OR Conditions.conditions_name LIKE %s)) 
    AND (gender LIKE %s OR gender LIKE %s) 

ORDER BY nct_id LIMIT %s''', 

[CondTypeU, CondTypeL, GenderQuery, GenderAll, LimitQuery])

我希望看到与原始sql查询相同的输出。从上面的代码中,我应该可以看到基于where子句中的条件的所有联接表中所有选定列的记录。请注意,额外的间距是为了可读性而添加的,并不反映确切的SQL,如果需要,我可以提供


Tags: nameidsqlonstatusconditionslikeinner