반응형
구글시트 API(Google Sheets API) in Python 데이터 업데이트
Google Sheet API 확인하기
REST Resource: v4.spreadsheets.values
- Append: Spreadsheet에 데이터를 추가할 때 사용합니다. 지정된 범위에 데이터가 있을 경우 다음 행 또는 열에서 데이터가 추가됩니다.
- Update: 정해진 Spreadsheet 범위를 설정하여 데이터 쓰기를 할 때 사용합니다. 기존 범위(range)에 데이터가 작성되어 있는 경우에 덮어쓰기가 실행됩니다.
- BatchUpdate: Spreadsheet 내 여러 범위(range)를 설정하여 데이터 쓰기를 할 때 사용합니다. 기존 범위(range)에 데이터가 작성되어 있는 경우에 덮어쓰기가 실행됩니다.
Update
데이터 업데이트를 할때 일반적으로 많이 사용하는 기능입니다. 연속된 범위(이하 Range)를 지정하여 구글시트를 업데이트할 때 사용하면 됩니다.
Python으로 Google Sheet Update하기
googlesheet_main.py
update_data함수 파라미터값을 테스트 중인 구글시트네임과 셀을 A1 표기법(A1 notation)에 따라 지정하였습니다.
- 시트네임: ProductTable
- 셀범위: A9
- 입력하는 셀의 범위가 정확히는 A9:C9이지만, A9으로 지정해도 Body에 있는 Value값에 따라 업데이트가 되므로 A9만 지정해도 됩니다.
from googlesheet_utils import GooglesheetUtils
if __name__ == "__main__":
googlesheet = GooglesheetUtils()
googlesheet.update_data('ProductTable!A9')
googlesheet_utils.py
- range: main.py에서 'ProductTable!A9'를 매개변수값으로 전달받아 수행합니다.
- valueInputOption='USER_ENTERED'로 지정하여 등록한 값이 데이터타입에 따라 파싱되도록 합니다.
- includeValuesInResponse=True로 지정하여 변경된 값을 확인할 수 있도록 합니다.
- body
- majorDimension을 'ROWS'로 지정하여 행 방향으로 values가 작성되도록 합니다.
- values: 기존에 작성된 구글시트 헤더에 맞게 product id, product name, product price 순으로 배열을 전달합니다.
from pprint import pprint
from googleapiclient import discovery
from google.oauth2 import service_account
class GooglesheetUtils:
spreadsheet_id = '1j5JmkqOFsv_WvJTwPVhRx9RbwmxZcaT27OZ3vNp8r0w'
def __init__(self) -> None:
self.credentials = service_account.Credentials.from_service_account_file(
'service_account_for_bq_tutorial.json',
scopes = ['https://www.googleapis.com/auth/spreadsheets']
)
self.service = discovery.build('sheets','v4', credentials=self.credentials)
# Googlesheet update
def update_data(self, range_name) -> None:
request = self.service.spreadsheets().values().update(
spreadsheetId=self.spreadsheet_id,
valueInputOption='USER_ENTERED',
includeValuesInResponse=True,
range=range_name,
body={
'majorDimension': 'ROWS',
'values': [
[
10001119,
"Adidas Hoodie",
49900
]
]
}
)
response = request.execute()
pprint(response)
API로 Google Sheet Update하기
HTTP request
PUT https://sheets.googleapis.com/v4/spreadsheets/{spreadsheetId}/values/{range}
path parameters
- spreadsheetId: 업데이트할 스프레트시트 ID
- range: 업데이트할 값 범위. range를 작성하는 방법은 A1 notation을 따릅니다.
- 예) Sheet1!A1:D5 (Sheet1 A1셀부터 D5셀까지의 영역)
query parameters
- includeValuesInResponse(optional): true로 설정하여 API 호출시 values가 리턴되도록 설정하였습니다.
- valueInputOption(required): USER_ENTERED(유저가 입력한 값을 파싱하여 타입에 맞춰 값이 등록되도록 함)
- Request body
- majorDimension: "ROWS"로 선택하여 values값이 행으로 등록되도록 함
- values: 입력할 값. 아래 코드에 첨부한 테스트 데이터를 values로 등록
BatchUpdate
연속되지 않은 범위(이하 Range)를 개별적으로 지정하여 구글시트를 업데이트할 때 사용하는 기능입니다. 예를 들어 연속되지 않은 범위인 A2:C2, A6:C2를 업데이트하는 경우 BatchUpdate 기능을 활용하여 해당 행을 개별적으로 지정하여 업데이트할 수 있습니다.
Python으로 Google Sheet Update하기
googlesheet_main.py
- batch_update_date 파라미터에 "WriteTest!A2", "WriteTest!A6" 튜플값으로 입력하였습니다.
from googlesheet_utils import GooglesheetUtils
if __name__ == "__main__":
googlesheet = GooglesheetUtils()
googlesheet.batch_update_date("WriteTest!A2", "WriteTest!A6")
googlesheet_utils.py
- batch_update는 update와 달리 path변수에 해당하는 값은 spreadsheetId뿐입니다.
- valueInputOption, includeValuesInResponse는 body값에 포함합니다.
- data값에 연속되지 않는 range를 각각 배열로 선언하며, 전달받은 range값은 튜플에서 각각 읽어오도록 하였습니다.
from pprint import pprint
from googleapiclient import discovery
from google.oauth2 import service_account
class GooglesheetUtils:
spreadsheet_id = '1j5JmkqOFsv_WvJTwPVhRx9RbwmxZcaT27OZ3vNp8r0w'
def __init__(self) -> None:
self.credentials = service_account.Credentials.from_service_account_file(
'service_account_for_bq_tutorial.json',
scopes = ['https://www.googleapis.com/auth/spreadsheets']
)
self.service = discovery.build('sheets','v4', credentials=self.credentials)
def batch_update_date(self, *ranges) -> None:
request = self.service.spreadsheets().values().batchUpdate(
spreadsheetId=self.spreadsheet_id,
body={
"valueInputOption": "USER_ENTERED",
"includeValuesInResponse": True,
"data": [
{
"range": ranges[0],
"values": [
[
10001149,
"Nike P6000",
119000
]
]
},
{
"range": ranges[1],
"values": [
[
10001255,
"Nike KD 15",
129000
]
]
}
]
}
)
response = request.execute()
pprint(response)
API로 Google Sheet Update하기
HTTP request
POST https://sheets.googleapis.com/v4/spreadsheets/{spreadsheetId}/values:batchUpdate
path parameters
- spreadsheetId: 업데이트할 스프레트시트 ID
request body
- valueInputOption
- includeValuesInResponse
- data: 업데이트할 데이터
- range
- values
참고자료
Update
Batch Update
Read and write cell values
반응형
'Data & MarTech' 카테고리의 다른 글
Airflow 로컬 환경 설치 및 테스트 (0) | 2024.05.29 |
---|---|
Pandas를 이용해 데이터를 Merge하는 방법과 로깅 활용하기 (0) | 2024.05.29 |
구글시트 API(Google Sheets API) in Python - 데이터 쓰기 (0) | 2023.11.10 |
구글시트 API(Google Sheets API)를 사용한 데이터 조회 (1) | 2023.06.12 |
[BigQuery] 파이썬 라이브러리를 활용한 빅쿼리 연동 - 2. 빅쿼리 클라이언트 선언 및 조회 기능 구현 (0) | 2023.06.06 |