λ°μ΄ν°λ² μ΄μ€μμ λ μ½λλ₯Ό μ‘°νν λλ Modelν΄λμ€λ₯Ό κ΄λ¦¬νλ Managerν΄λμ€λ₯Ό μ΄μ©νλ€. κ°μ₯ κ°λ¨νκ²λ λͺ¨λ λ μ½λλ₯Ό κ°μ Έμ€λ λ°©λ²μ΄ μλλ°, λͺ¨λΈλ§λ€ κΈ°λ³Έμ μΌλ‘ μ 곡λλ objectλΌλ λ§€λμ λ₯Ό μ΄μ©νλ€. object λ§€λμ λ‘ λ μ½λλ₯Ό μ‘°ννλ©΄ QuerySetμ΄ λ°νλλ€. μ΄λ κ΄κ³ν λ°μ΄ν°λ² μ΄μ€ CLIμΈ JDBCμ ResultSetκ³Ό μ μ¬νλ€.
filter ¶
ν λͺ¨λΈμ λν΄μλ μ¬λ¬ κ°μ§ νν°λ₯Ό μ€μΉν μ μλ€. νν°λ SQLλ¬Έμμ whereμ μ ν΄λΉνλ μν μ νλ€. νν°μλ κ²μνλ 컬λΌμ μμ μΌμΉ, λΆλΆ μΌμΉ, μ¬μ΄ κ°, ν¬ν¨, μ°μμΌ μ΅μ
μ μ€ μ μλ€. κΈ°λ³Έμ μΌλ‘ νν°λ AND μ‘°ν©μΌλ‘ μ΄λ£¨μ΄μ§λ©°, ORμ‘°ν©μ μ¬μ©νκ³ μΆλ€λ©΄ QλΌλ 쿼리 μ€λΈμ νΈλ₯Ό μ¬μ©ν΄μΌ νλ€.9 μλλ νν°λ₯Ό μ΄μ©ν΄ λ³΄κ³ λ μ§κ°2006λ
10μ 1μΌ μ΄νμΈ μν λ³΄κ³ μλ₯Ό μ°Ύλ pythonμ½λμ κ·Έμ ν΄λΉνλ SQLλ¬Έμ 보μ¬μ€λ€.
RiskReport.objects.filter(date__gt=datetime.date(2006, 10, 1))
SELECT ... FROM risk_report WHERE date > '2006-10-1'
select_related ¶
μΌλλ€ κ΄κ³μΈ λ μ½λμ κ²½μ°λ selete_relatedλ©μλλ₯Ό μ΄μ©νλ©΄ λ°μ΄ν°λ² μ΄μ€ μ κ·Ό νμλ₯Ό μ€μΌ μ μλ€. μΌλ°μ μΈ λ°μ΄ν°λ² μ΄μ€ μ‘°νλ μΆμνλμ΄μμ΄ μ€νν λλ§λ€ 쿼리λ₯Ό μννλ€. νμ§λ§ selete_relatedλ©μλλ₯Ό μ¬μ©νλ©΄ ν λ² λ°μ΄ν°λ² μ΄μ€μμ κ²°κ³Όλ₯Ό κ°μ Έμ¨ ν νμν λλ μ΄λ₯Ό κ·Έλλ‘ μ¬μ©νλ€. λ€μ μμ μμ λ λ°©μμ΄ μ΄λ»κ² λ€λ₯Έμ§ νμΈν μ μλ€.
# λ°μ΄ν°λ² μ΄μ€μμ ν λ² κ°μ κ°μ Έμ¨λ€. c = ControlReport.objects.get(id=1) # Employeeν μ΄λΈμ μ κ·ΌνκΈ° μν΄ λ€μ λ°μ΄ν°λ² μ΄μ€μμ κ°μ κ°μ Έμ¨λ€. r = c.reporter
# λ°μ΄ν°λ² μ΄μ€μμ κ°μ 미리 κ°μ Έμ¨λ€. c = ControlReport.objects.select_related().get(id=1) # μ΄μ μ Employeeκ°κΉμ§ κ°μ ΈμκΈ° λλ¬Έμ λ€μ λ°μ΄ν°λ² μ΄μ€μμ κ°μ κ°μ Έμ€μ§ μλλ€. r = c.reporter
extra ¶
μ¬μ©μλ μνλ κ²½μ° extraλ©μλλ₯Ό μ΄μ©ν΄ μνλ 컬λΌμ μΆκ°ν κ²°κ³Όλ₯Ό μ»μ μ μλ€. λ€μμ 2006λ
1μ 1μΌ μ΄ν λ³΄κ³ μλ₯Ό μ΅μ μΌλ‘ νμνλ 컬λΌμ κ°μ§ 리ν¬νΈ μ 보λ₯Ό κ°μ Έμ¨λ€.
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);
values ¶
μ¬μ©μλ valuesν¨μλ₯Ό μ΄μ©ν΄μ μνλ μμ±μ μ§μ ν μ μλ€. μ΄λ κ²μ 쑰건μ λ§μ‘±νλ λ μ½λμ νμν μμ±λ§μ μ΄μ©νλ―λ‘ ν¨μ¨μ μ΄λ€. λν valuesν¨μλ QuerySetμ μμν ValuesQuerySetμ 리ν΄νλ―λ‘ λ€μ μμμ μ¬μ©ν κ²μ 쑰건μ μ¬μ©ν μ μλ€. νμ§λ§ ValuesQuerySetμ μ¬μ ν(dictionary) μλ£κ΅¬μ‘°λ₯Ό κ°μ§κ³ μκΈ° λλ¬Έμ, λ§μ μμ λ μ½λλ₯Ό μ»μ΄μ€κΈ°μλ λΆμ μ νλ€. λ€μμ μ¬μ μ 보μμ μ΄λ©μΌ μμ±λ§μ μ»μ΄μ¨λ€.
Employee.objects.values('email')
join ¶
Djangoμμ κΈ°λ³Έμ μΌλ‘ μ 곡νλ μ‘°μΈ μ°μ°μ μλ€. SQLλ¬Έμ μ§μ μννμ¬ μνλ κ²°κ³Όλ₯Ό μ»μ μ μλ€. μ΄λ JDBCμ μΈν°νμ΄μ€μ λΉμ·νλ©°, 컀μλ₯Ό μ΄μ©νμ¬ μ§μλ₯Ό μνν κ²°κ³Όλ₯Ό νλμ© μ»μ΄μ€λ λ°©μμ μ¬μ©νλ€. λ€μμ νΉμ λΆμ μμ μνν μν κ΄λ¦¬ λμ±
μ μ»μ΄μ€λ ν¨μμ΄λ€.
----
django/Example
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
django/Example