카테고리 없음

Django에서 Raw SQL Query 사용하기: 사용 사례와 주의 사항

심집사 2023. 7. 12. 02:21

 

Django는 기본적으로 ORM(Object-Relational Mapping)을 사용하여 데이터베이스 관련 작업을 처리합니다. 하지만 경우에 따라 직접 작성한 SQL 쿼리를 실행하는 것이 필요할 수 있습니다. 이 글에서는 Django에서 Raw SQL Query를 사용하는 방법과 사용 사례, 주의 사항을 살펴보겠습니다.

 

 

Raw SQL Query 사용 방법

Django에서 직접 작성한 SQL 쿼리를 실행하려면, raw() 메서드를 사용할 수 있습니다. raw() 메서드는 주로 모델의 매니저(Manager)에 사용되며, 원하는 SQL 문을 실행한 후 그 결과를 모델 인스턴스로 반환합니다.

 

예시:

python
from django.db import models

class MyModel(models.Model):
    ...

my_raw_query = "SELECT * FROM myapp_mymodel WHERE some_field=%s"
my_models = MyModel.objects.raw(my_raw_query, [some_value])

사용 사례

  • 성능 최적화: 특정 경우에 ORM의 쿼리가 비효율적일 수 있으며, Raw SQL Query를 사용하여 성능을 개선할 수 있습니다.
  • 복잡한 쿼리 작성: ORM을 사용하여 처리하기 어려운 복잡한 쿼리를 직접 작성하여 실행할 수 있습니다.
  • 특정 데이터베이스 기능 사용: Django ORM에서 지원하지 않는 특정 데이터베이스와 관련된 기능을 사용하려면 Raw SQL Query를 사용할 수 있습니다.

주의 사항

  • SQL injection: Raw SQL Query를 사용할 때 유저 입력값을 직접 쿼리에 포함하는 것을 피하고, 필요한 경우 Django에서 제공하는 파라미터 바인딩 기능을 사용합니다.
  • 유지 보수: Raw SQL Query를 사용하면 데이터베이스 스키마 변경 시 직접 쿼리를 수정해야 할 수 있으며, 코드의 가독성이 낮아질 수 있습니다.
  • What you wrote is what you get: raw() 메서드를 사용할 경우, ORM이 쿼리를 최적화하거나 재사용하는 것이 아니라, 사용자가 작성한 SQL 문을 그대로 실행합니다.

결론

Django에서 Raw SQL Query를 사용하는 것은 경우에 따라 필요하거나 효율적일 수 있습니다. 하지만 사용 시 SQL Injection과 같은 보안 문제와 유지 보수성, 최적화 관련 사항을 주의해야 합니다. 가능하면 Django ORM을 사용하여 데이터베이스 작업을 처리하고, 필요한 경우에만 Raw SQL Query를 사용하는 것이 바람직합니다.