Notion API master series 21 - Analysis - Update database

소찬 (Chan)·2022년 11월 29일
0
post-thumbnail

Reference API URL : Update database

Let's update the database. We can change the 'title' of 'database' or 'properties' value with this method.

  • database_id (string) required
    identifier for a Notion database
    You can get database_id through the search method.
databases = notion.search(filter={"property": "object", "value": "database"})
pprint(databases)

We need the database_id value.

'results': [{'archived': False,
             ...
             'id': '021eb424-7a41-47ae-9252-f67d4f6e6b05',
             ...
             'properties': {'메모': {'id': '%5C%3D%7B%5E',
                                    'name': '메모',
                                    'rich_text': {},
                                    'type': 'rich_text'},
                             '상태': {'id': '%3EQQn',
                                    'name': '상태',
                                    'select': {'options': [
                                                           {'color': 'green',
                                                            'id': '8e6092bc-4dcf-42fc-ae54-5e6bf1586c48',
                                                            'name': '★★★'},
                                                           {'color': 'purple',
                                                            'id': 'ed26ef07-df97-4ced-9275-9aa0c71d5bb1',
                                                            'name': '★★'},
                                                           {'color': 'gray',
                                                            'id': '632758dd-d74c-455c-8a3b-0d063282a3a7',
                                                            'name': '★'}]},
                                    'type': 'select'},
                             '이름': {'id': 'title',
                                    'name': '이름',
                                    'title': {},
                                    'type': 'title'}},
              'title': [{'annotations': {'bold': False,
                                         'code': False,
                                         'color': 'default',
                                         'italic': False,
                                         'strikethrough': False,
                                         'underline': False},
                         'href': None,
                         'plain_text': '피자 맛집 리스트',
                         'text': {'content': '피자 맛집 리스트', 'link': None},
                         'type': 'text'}]

Now try to bring database_id. Get the id of the first([0]th) database.

database_id = databases['results'][0]['id']
  • title (array)
    Title of database as it appears in Notion. An array of rich text objects. If omitted, the database title will remain unchanged.
    title must be an array which means to be list form.
title_value = [{'type': 'text', 'text': {'content': '동네맛집 리스트', 'link': None}}]

Put the value we want to modify into properties.
For example, I want to add the "4 stars" option and add more an option value from the above status.

select_property = {'평점': {'name': '평점', # 평점 means score
                   'select': {'options': [{'color': 'red', 'name': '★★★★'}]},
                   'type': 'select'}
                   }

Try to get the option of properties that is pre-existing value '평점'(score).

properties = databases['results'][0]['properties']
property_score = properties['평점']
pprint(property_score)

Print property_score then value shows like this.

{'id': '%3EQQn',
 'name': '평점',
 'select': {'options': [{'color': 'green',
                         'id': '8e6092bc-4dcf-42fc-ae54-5e6bf1586c48',
                         'name': '★★★'},
                        {'color': 'purple',
                         'id': 'ed26ef07-df97-4ced-9275-9aa0c71d5bb1',
                         'name': '★★'},
                        {'color': 'gray',
                         'id': '632758dd-d74c-455c-8a3b-0d063282a3a7',
                         'name': '★'}]},
 'type': 'select'}

Here, the needed value is the options value. Put the 'options' value into a variable. And then combine with select_property, which is a list form.

option_value = property_score['select']['options']
select_property['평점']['select']['options'].extend(option_value)

Now call to update, then API will update as following from the inputted values. Id value will be identical to pre-existing value, so you don't need to do the del to 'id' value of the 'option' key.

notion.databases.update(database_id=database_id, title=title_value, properties=select_property)

NOTE: When do update with color

If 'color' differs from pre-existing values, update is impossible.
notion_client.errors.APIResponseError: Cannot update color of select with name: ★★★
'★★★' is set as the 'green' color, so you must update the 'green' color when the value is '★★★'.

profile
QA Specialist

0개의 댓글