TIL #12 mysql-CRUD

tycode·2021년 6월 20일
0

TIL

목록 보기
14/30
  • 데이터 불러오기
    from products.models import Product
    (products라는 테이블에서 Product 클래스를 불러온다)

요고 입력해야지 아래 명령들을 실행할 수 있다.
만약 python이나 terminal을 끄고 다시 킨다면 다시 입력해줘야 한다.

Create

  • Product.objects.create(name='coffee', price=100, description='good')
  • Product.objects.create(name='ade', price=100)
  • Product.objects.create(name='smoothie', price=80, description='')
    • NULL과 비어있는 부분은 models.py에서 필드를 입력할 때, (null=True, blank=True)를 추가했기에 가능하다.

Read

  • 전부 불러들이기
    Product.objects.all()
  <QuerySet [<Product: Product object (1)>, <Product: Product object (2)>, <Product: Product object (3)>]>
  • 객체 바로 가져오기 vs Query셋 가져오기(list로)
    Product.objects.get(id=1) == Product.objects.filter(id=1)[0]
  <Product: Product object (1)>

         Product.objects.filter(id=1)

  <QuerySet [<Product: Product object (1)>]>
  • 특정 id값만 가져오기
    Product.objects.get(id=1) 또는 Product.objects.get(name='coffee')
  <Product: Product object (1)>
  • 특정 id의 name 가져오기
    Product.objects.get(id=1).name == Product.objects.filter(id=1)[0].name
  coffee
  • Product.objects.filter(id=1) 또는 Product.objects.filter(name='coffee')
    • filter로 value를 불러올 수는 없다.
  <Product: Product object (1)>

Update

  • 1번 name 변경하기

    예시1)
    Product.objects.filter(id=1).update(name='ice')
    (id=1 대신 name='coffee'를 입력해도 된다.)

    예시2) 또는, 객체를 변수에 담아서 수정
    a1 = Product.objects.get(id=1).name
    a1.name = ice

   1   <-- True(성공적으로 바뀜, 0일 경우는 실패했다는 의미)

변수 객체 전체를 변수에 담을 경우 get, filter둘다 가능하다.
a2 = Product.objects.get(id=1)
a2 = Product.objects.filter(id=1)

  • 3번 price, description 2개 동시에 변경
    Product.objects.filter(id=3).update(price=100, description='very very very cold')
   1
  • 1번 description 비워두기
    Product.objects.filter(id=1).update(description=None)
   1

Delete

  • 행 전체삭제
    Product.objects.get(id=1).delete()
    Product.objects.filter(id=1).delete()

  • 동일한 값들 삭제
    Product.objects.get(price=100).delete()
    위에 테이블에 price=100이 3개가 있기 때문에 삭제되지 않는다.

    만약 price=100짜리를 전부 삭제하고 싶다면,
    Product.objects.filter(price=100).delete()

    ⛔️주의:
    Project.objects.filter().delete() == Proejct.obejcts.all().delete
    필터에 아무값도 넣지 않는다면, 테이블 전체가 삭제된다.

테이블에서 특정 부분을 비워두고 싶다면 update()로 None 또는 ''로 해야한다.
조건: 모델링에서 필드값을 (null=True, blank=True)로 미리 지정되있어야 된다.

그외 Model Method 종류

exclude(), values(), values_list(), count(), first(), last(), exists()

칼럼이름__isnull=True : null로 되어 있는 값들 필터
칼럼이름__exact='' : 공란으로 되어 있는 값들 필ㄹ터
칼럼이름__contains='coffee' : 찾기

예시)
Product.objects.filter(name__isnull=True).exclude(description__exact='').count()
이름이 null & 설명란 공백인 테이블 count

Product.objects.exclude(name__isnull=True)
Product.objects.exclude(name__exact='')

0개의 댓글