Day 12 Django for KN(리뉴얼 복습)

김의석 ·2024년 2월 19일

Django

목록 보기
12/39

Django for KN(Koinonia)

  • 해당 문서는 Django 강의가 리뉴얼 되어 이전 과정들을 복습하는 문서로 작성 됨.

Database 연동

# default database 설정 및 외부 database 설정

settings.configure(
DATABASES={
        "default": {"ENGINE": "django.db.backends.sqlite3", "NAME": "melon-20230906.sqlite3"},
    }
)

django.setup()
  • sqlite3는 db명이 따로 없다. NAME key에 파일 경로 지정
  • 장고는 1개의 project에서 여러개의 database를 연결할 수 있다.
# SQL 직접 조합하여 데이터 조회

def get_song_list(query: str):
    # connection = _sqlite3.connect('melon-20230906.sqlite3')
    cursor = connection.cursor()
    # connection.set_trace_callback(print)

    if query:
        param = '%' + query + '%'
        
        sql = "SELECT * FROM songs WHERE 가수 LIKE %s OR 곡명 LIKE %s"
        cursor.execute(sql, [param, param])

        column_names = [desc[0] for desc in cursor.description]
        
        song_list = [dict(zip(column_names , song_tuple)) for song_tuple in cursor.fetchall()]
        
        return song_list
    else:
        cursor.execute("SELECT * FROM songs")
# 장고 orm모델 활용하여 데이터 조회하기

class Song(models.Model):
    id = models.AutoField(primary_key=True)
    가수 = models.CharField(max_length=100)
    곡명 = models.CharField(max_length=200)
    곡일련번호 = models.integerField()
    순위 = models.integerField()
    앨범 = models.CharField(max_length=200)
    좋아요 = models.integerField()
    커버이미지_주소 = models.URLField()
    class meta:
        db_table = "songs"
        app_label = "melon"

def index(request):
    query = request.GET.get("query", "").strip()
    song_list = Song.obejects.all()
    if query:
        song_list = song_list.filter(
            Q(곡명__icontains=query)| Q(가수__icontains=query)
        )


    return render(request, "index.html", {"song_list": song_list, "query": query})
  • 모델 생성 후 간결하게 QuerySet 생성 및 조회가 가능하다.
profile
널리 이롭게

0개의 댓글