RiskReport.objects.filter(date__gt=datetime.date(2006, 10, 1))
SELECT ... FROM risk_report WHERE date > '2006-10-1'
# 데이터베이스에서 한 번 값을 가져온다. c = ControlReport.objects.get(id=1) # Employee테이블에 접근하기 위해 다시 데이터베이스에서 값을 가져온다. r = c.reporter
# 데이터베이스에서 값을 미리 가져온다. c = ControlReport.objects.select_related().get(id=1) # 이전에 Employee값까지 가져왔기 때문에 다시 데이터베이스에서 값을 가져오지 않는다. r = c.reporter
RiskReport.objects.extra(select={'is_recent': " date > '2006-01-01'"})이는 다음 SQL과 같다.
SELECT blog_entry.*, (pub_date > '2006-01-01') FROM blog_entry;extra메소드를 사용하면 다음과 같은 조금 복잡한 질의도 할 수 있다. 각 직원이 몇 번이나 위험 보고서를 작성했는지 알아낸다.
Employee.objects.extra( select={ 'num_of_report': 'SELECT COUNT(*) FROM risk_report WHERE risk_report.reporter = employee.id' }, )
SELECT employee.*, (SELECT COUNT(*) FROM risk_report WHERE risk_report.reporter = employee.id) FROM employee;where절을 사용하는 것 역시 가능하다.7 하지만 중첩질의는 지원하지 않는다.
RiskReport.objects.extra(where=['id IN (3, 4, 5, 20)'])
SELECT * FROM risk_report WHERE id IN (3, 4, 5, 20);
Employee.objects.values('email')
def getDartmentControl(depart_id): from django.db import connection cursor = connection.cursor() qeury=' ' ' select report_controlreport.content from report_controlreport, report_department_employees where report_department_employees.department_id = report_department_employees.employee_id and report_department_employees.employee_id = report_controlreport.reporter_id and report_department_employees.department_id= %d' ' ' cursor.execute(query, [depart_id]) row = cursor.fetchone() return row