본문 바로가기

코딩일기정리

[21.03.10]Django_Model(ORM, DB API, CRUD 기본)

2021-03-10

* DJANGO

  1. Django Model

    • 데이터 베이스를 관리하는 역할을 한다. (클래스를 만들어서 안에 항목들을 넣는다.)
      데이터 베이스랑 같다고 생각하면 또 안된다~

    • 웹 어플리케이션의 데이터를 구조화하고 조작하기 위한 도구

    • 조작 방법? (ORM : Object relational mapping)
      ORM : SQL 모르기 때문에 python 언어로도 DB와의 소통할 수 있도록 도와준다.

      • ORM 장단점
        장점 : SQL을 몰라도 DB조작 가능, SQL의 절차적 접근이 아닌 객체 지향적 접근으로 생산성이 높다.
        단점 : ORM만으로 완전하지 않다. 완전한 서비스 구현은 어렵다.
        @@ 생산성이 높으니까 쓰는거다!
        @@ DB를 객체로 조작하기 위해 ORM을 사용한다.
    • migrations
      django가 model에 생긴 변화를 반영하는 방법

      4가지 명령어 (in 터미널)

      • makemigrations : model 변경한 사항에 기반한 새로운 마이그레이션(설계도)을 만들 때
        ORM이 읽을 수 있는 형식으로 바꾼다.
      • migrate : 마이그레이션을 db에 반영하기 위해 사용한다.
        모델의 변경사항과 db의 스키마가 동기화된다.
      • sqlmigrate : 마이그레이션에 대한 sql 구문을 볼 수 있다. (sql 문법 궁금하면 한번씩 쑥쑥)
      • showmigrations : 각 마이그레이션 파일이 migrate 됐는지 알 수 있다.

      모두 python manage.py 명령어 로 터미널에 작성해 작동시킨다.

    • DB API ( database와 소통하는 방법 )

      Article.objects.all()
      (클라스 이름).objects.(Queryset api)

      위의 방법으로 데이터 추가, 삭제, 정렬 등을 할 수 있다.

      BUT. 너무 하나하나 확인하기에 번거롭다
      ▶ django-extensions 를 깔고(pip install) python manage.py shell_plus 내에서 조작하자.

 CRUD(Create Read Update Delete)

 1. Create

    3가지 방법

    ```python
    article = Article()
    article.title = ''
    article.content = ''
    article.save()
    ```

    ```python
    article = Article(title='', content='')
    article.save()
    ```

    ```python
    Article.objects.create(title='', content='')
    ```

 2. Read :star:

    3가지 방법

    1. all() : 새로운 querysets를 주는 방법

    2. get() : querysets를 안쓰는 방법
       ※ 객체가 없으면 doesnotexist 에러 발생
       ※ 객체가 여러개일 경우, multipleobjectreturned 에러 발생

       → unique(pk 같은) 또는 not null 특징을 가지고 있는 경우에만 사용한다.

    3. filter() : 여러 개일 경우, queryset으로 뭉쳐서 반환한다. 에러가 안나~

 3. Update

    ```python
    article = Article.objects.get(pk=1)
    article.title = 바꾸고
    article.save()
    ```

 4. Delete

    ```python
    article = Article.objects.get(pk=1)
    article.delete()
    ```
  • admin 활용 (사용자 등록, 수정, 권한 등등 간보기만?)

    admin.py 내에서
    model의 만든 클라스(Article) import 하고 admin.site.register(클라스 이름)

    $ python manage.py createsuperuser 하면 계정 생성

※ 이번주 해야할 일
: 블로그 2회 업로드 (완료). 알고리즘 문제 1개 풀기

※ 한줄 하루 마무리
: 뭔가 신기하고 재미잇는데 너무 많은 양이 들어온다 ㅠㅠ