본문 바로가기

개발/효율적으로 도와주는 도구 또는 api

노션API 사용방법 - 4. 데이터베이스 행(row) 수정, 삭제 with Python

  목차
  1.  데이터베이스 항목(row) 수정
  2.  데이터베이스 항목(row) 삭제

 

 

1. 데이터베이스 항목(row) 수정하기

 

1 - 1. 요청할 url

 

생성했던 항목(row)의 id을 넘겨주어야한다.

항목 리스트 (v1/databases/{database_id}/query) 로 가져왔을 때에는 리스트 안의 각 object 밑 id가 page_id 이며, 항목 생성으로 응답받을 경우에도 object 밑 id가 page_id 이다.

 

url = f'https://api.notion.com/v1/pages/{page_id}'

 

1 - 2. 요청할 데이터

 

특정 키의 값을 수정 및 삭제할 때에만 아래 형태 쓰고

 

'key name': {dict 형태의 수정할 데이터}

 

만약 특정 키만 수정안하려면 위 코드를 아예 안써야 한다.

 

보내야하는 형태가 항목(row) 생성과 항목들을 가져올 때의 응답 데이터 형태가 똑같아서 어렵지 않다.

필요한 것만 남기고 수정할 부분만 바꾸어서 요청하면 되는데 주석을 참고해서 아래와 같은 형식으로 작성하면 된다.

 

update_data = {
  "properties": {
  	
    # 복수 선택 속성일 경우
    "취미": {
      "multi_select": [
        {
          "name": "게임",
          
        },
        {
          "name": "음악감상",
          
        }
      ]
      # "multi_select": []  # 복수 선택 속성은 빈 리스트를 보내면 해제된다.
    },
    
    # 단일 선택 속성일 경우
    # "직급": {
      # "select": {
        # "name": "과장",
        # }
      # # "select": None  # 단을 선택 속성은 None을 보내야 해제된다.
    # },
    
    "이름": {
      "rich_text": [
        {
          "text": {
            "content": "홍길동",
          }
        }
      ]
    },
    
    # 날짜 속성일 경우
    "생일": {
      'date': {
        'start': 'YYYY-MM-DD'
      }
      # 'date': None  # 날짜 값 지울 경우
      # # start가 기본으로 표시되는 키로 yyyy-mm-dd 형식으로 입력하면 반영된다.
      # # 만약 기간형태로 종료일이 필요하다면 'end'란 키를 추가하면 된다.
    },
    
    # "번호": {
      # "phone_number": "010-1111-2222"
    # },
    
    "팀": {
      "select": {
        "name": '개발'
      }
      # "select": None
    },
    
    # 이메일의 경우
    # "회사이메일": {
      # "email": "ddd@ddddd.kr"
      # # "email": None
    # },
    
    # 불리언 속성(체크박스)의 경우
    "교육 완료": {
      "checkbox": True  # TODO 칸 체크
      #  "checkbox": False  # TODO 칸 비운 상태
    }
    
    "닉네임": {
      "title": [
        {
          "text": {
            "content": "길동이",
          },
          
        }
      ]
    }
  },
}

 

위와 같은 데이터로는 주석안된 취미, 이름, 생일, 팀, 교육 완료, 닉네임만 수정될 것이다.

 

1 - 3. patch 요청

 

requests.patch(url=url, json=update_data, headers=header)

 

 

2. 데이터베이스 항목(row) 삭제하기

 

2 - 1. 요청할 url

 

url = f'https://api.notion.com/v1/pages/{page_id}'

 

2 - 2.  body

 

body = {'archived': True}

 

2 - 3. Patch 요청

 

항목 생성할 때처럼 json 문자열로 변환(dumps)하여 요청하면 된다.

 

requests.patch(url=url, data=json.dumps(body), headers=header)

 

2 - 4. 만약 삭제된 항목을 복원하려면 아래 처럼 다시 요청하면 된다.

 

body = {'archived': False}

requests.patch(url=url, data=json.dumps(body), headers=header)