본문 바로가기

Python and Data

ORM Query

ORM(Object-relational mapping)

 

Django에서 DB에 접근하는 방식이다. sql을 직접 작성해서 excute 하는 방법이 존재하지만 

ex) 

import sqlite3 as sql

conn = sql.connect("db_name").cursor

conn.execute("SQL")

 

이 방식보다는 Django류를 쓴다면 ORM을 사용하는것이 훨씬 편하다.

 

models.py에 다음과 같은 모델이 정의되어 있다고 가정하면

 

class OriginImage(models.Model):
    user = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        on_delete=models.CASCADE,
        related_name='origin_images'
    )
    image_data = models.TextField()  # base64 encoded image (color)
    uploaded_at = models.DateTimeField(default=timezone.now)

    def __str__(self):
        return f"OriginImage {self.id} uploaded by {self.user.email}"

 

views.py에서는 아래와 같은 방식으로 OriginImage Model에 user_id 가 같은 이미지만 필터링해서 가져올 수 있다.

 

    def get_queryset(self):
        return OriginImage.objects.filter(user_id=self.request.user)

 

.filter 말고도 사용할 수 있는 옵션은 다음과 같다.

 

objects.all() : 모든 데이터 출력

objects.filter([optional field]) : [optional field] 만 출력

objects.exclude([optional field]) : [optional field] 제외 출력 (!filter)

objects.get() : 데이터가 1개일 때 출력

objects.first() : 첫번째 데이터 출력

objects.last() : 마지막 데이터 출력