Airtable 대량 삭제 자동화: 파이썬(Python)으로 490개 행 한 번에 지우기
Airtable을 사용하다 보면 테스트 데이터나 오래된 로그 데이터를 대량으로 삭제해야 할 때가 있습니다. 하지만 Airtable 웹 인터페이스에서 수백 개의 행을 일일이 삭제하는 것은 번거롭고, API 역시 한 번에 최대 10개까지만 삭제 가능하다는 제약이 있습니다.
오늘은 파이썬의 pyairtable 라이브러리를 활용해 1~490번째 행을 자동으로 삭제하는 스크립트를 만들어 보겠습니다. 특히 보안을 위해 .env 파일을 활용하는 방법도 함께 다룹니다.
1. 사전 준비
라이브러리 설치
API 호출을 편리하게 해주는 pyairtable과 환경 변수 관리를 위한 python-dotenv를 설치합니다.
pip install pyairtable python-dotenv
환경 변수(.env) 설정
보안을 위해 API Key와 Base ID 등은 코드에 직접 노출하지 않고 .env 파일에 저장합니다. 이번 예제에서는 스크립트 파일의 상위 폴더에 .env를 두는 구조로 진행합니다.
파일 위치: ../.env
코드 스니펫
AIRTABLE_API_KEY=your_personal_access_token
AIRTABLE_BASE_ID=your_base_id
AIRTABLE_TABLE_NAME=your_table_name
2. 파이썬 삭제 스크립트 작성
Airtable API의 10개 제한(Batch Limit)을 pyairtable이 내부적으로 처리해주기 때문에 코드가 매우 간결해집니다.
Python
import os
from dotenv import load_dotenv
from pyairtable import Table
# 1. 환경 변수 로드 (상위 폴더의 .env 파일 탐색)
parent_dir = os.path.abspath(os.path.join(os.getcwd(), '..'))
dotenv_path = os.path.join(parent_dir, '.env')
load_dotenv(dotenv_path)
# 2. 변수 할당
API_KEY = os.getenv('AIRTABLE_API_KEY')
BASE_ID = os.getenv('AIRTABLE_BASE_ID')
TABLE_NAME = os.getenv('AIRTABLE_TABLE_NAME')
def delete_airtable_records():
if not all([API_KEY, BASE_ID, TABLE_NAME]):
print("Error: 환경 변수 설정이 올바르지 않습니다.")
return
# 테이블 객체 생성
table = Table(API_KEY, BASE_ID, TABLE_NAME)
try:
# 3. 삭제 대상 레코드 가져오기 (상위 490개)
# 기본적으로 생성일자 순 혹은 뷰(View) 설정에 따라 가져옵니다.
records = table.all(max_records=490)
record_ids = [r['id'] for r in records]
if not record_ids:
print("삭제할 레코드가 존재하지 않습니다.")
return
print(f"총 {len(record_ids)}개의 레코드를 삭제 중...")
# 4. 배치 삭제 실행
# pyairtable은 10개씩 나누어 삭제하는 로직을 자동으로 처리합니다.
table.batch_delete(record_ids)
print(f"✅ 성공적으로 {len(record_ids)}개의 행을 삭제했습니다.")
except Exception as e:
print(f"❌ 오류 발생: {e}")
if __name__ == "__main__":
delete_airtable_records()
3. 핵심 포인트 및 주의사항
API 제한 해결 (Batch Delete)
Airtable 공식 API는 한 번의 요청으로 최대 10개의 레코드만 삭제할 수 있습니다. 위 코드에서 사용한 table.batch_delete() 메소드는 사용자가 10개씩 끊어서 루프를 돌릴 필요 없이, 내부적으로 리스트를 10개씩 쪼개어 요청을 보내주므로 매우 효율적입니다.
레코드 순서 보장
table.all(max_records=490)는 현재 Airtable의 기본 데이터 노출 순서를 따릅니다. 만약 특정 뷰(View)의 정렬 상태를 기준으로 삭제하고 싶다면 아래와 같이 뷰 이름을 지정하세요.
Python
records = table.all(max_records=490, view='Grid view')
보안: .env 활용
.env 파일을 상위 폴더에 두는 방식은 프로젝트 소스 코드가 포함된 폴더만 공유하거나 깃허브(GitHub)에 업로드할 때 실수로 API 키가 유출되는 것을 방지하는 효과적인 방법입니다.
마치며
파이썬을 활용하면 반복적인 데이터 관리 업무를 획기적으로 줄일 수 있습니다. 위 코드를 응용하여 특정 조건(예: ‘완료’된 항목만 삭제)에 맞는 데이터만 필터링하여 삭제하는 기능도 구현해 보세요!
댓글남기기