파이썬 구글 스프레드 연동

BG·2021년 6월 20일
0

2021/6/19 : 1차 작성
2021/6/20 : 일부 이미지 추가

아직 이미지 업르드를 마무리 하지 못했습니다
빠른 시간안에 완료 하도록 하겠습니다!

팀프로젝트를 진행하면서 원활한 코딩 & 테스트를 위하여, 다량의 데이터가 필요했습니다.
csv파일을 각자 관리 하자니 새로운 데이터가 추가 될때, 각자의 csv를 전부 다 추가를 해줘야 하고
귀찮아서 csv파일 관리를 소흘히 하면 팀원들과 데이터가 달라지니 귀찮은 작업의 반복이었습니다.

그래서 생각하다 구글 드라이브로 데이터를 공유하기 시작했고,
귀찮은 데이터 공유 & 업데이트 작업의 양은 훨씬 줄었지만,
구글 드라이브에서 하나하나 csv로 변환을 해서 작업을 해야 되는 귀찮음이 아직 남아있었습니다.

그 귀찮음 마저 없애버리고 싶어 google api를 이용하여
google spread sheet에서 바로 프로젝트 DB로 밀어넣는 간단한 코드를 작성해 보았습니다.

작업의 간단한 순서는 이렇습니다.

  1. google api 설정
  2. google spread sheet 설정
  3. pip install gspread 설치
  4. python code 작성

google api 설정

  1. 구글에서 google api console를 검색하여 API console를 찍고 들어간다.

  2. Google Cloud Platform 타이틀 옆에 프로젝트 선택을 누른다.
    (전 이미 auto-work-test라는 프로젝트를 만든 상태이기에 캡쳐와 같이 표시되는 것입니다.)

  3. 새프로젝트를 클릭한다.

  4. 프로젝트이름을 적고 만들기를 클릭한다.

  5. 왼쪽 카테고리에서 사용자 인증 정보를 클릭한다.

  6. 상단에 사용자 인증 정보 만들기를 클릭한다.

  7. 서비스계정을 클릭한다.

  8. 서비스 계정 세부정보를 입력하고 만들기 버튼을 누른다.

  9. 역할선택에서 소유자를 선택하고 계속버튼을 누른다.

  10. 완료 버튼을 누른다.

  11. 서비스계정에서 만들어진 이메일을 클릭 하고 들어간다.

  12. 상단에 세부정보, 권한, 키, 측정항목, 로그 중 키를 눌러 들어간다.

  13. 키추가를 눌러 새 키 만들기를 선택한다.

  14. JSON을 선택하고 만들기를 클릭한다.
    14-1. 만들기를 선택하면 JSON이 자동으로 다운로드 되는데, 잘 보관해 둔다.

  15. 제품 및 리소스 검색에서 google sheet api를 검색하여 클릭한다.

  16. 사용 버튼을 누른다.

  17. 제품 및 리소스 검색에서 google drive api를 검색하여 클릭한다.

  18. 사용 버튼을 누른다.

[google drive 설정]
1. 자신의 google drive에서 테스트용 스프레드 시트를 하나 만든다.
2. 스프레드 시트 타이틀을 test로 작성한다.
3. google api 설정때 내려 받아진 json 파일을 열어 client_email 주소를 복사한다.
4. 테스트용 스프레드 시트를 client_email과 공유한다.

[console 설정]
1. pip install gspread 설치

[visual studio code]

import gspread
import django
import os
# os.environ.setdefault('DJANGO_SETTINGS_MODULE', '프로젝트 settings.py 경로')
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'catchfabric.settings')

django.setup()

# 프로젝트 모듈
from products.models import *
from users.models import *
from orders.models import *

# gc = gspread.service_account(filename='google api 설정 하면서 내려 받아진 파일명')
gc = gspread.service_account(filename='key.json')

# sh = gc.open('테스트용 스프레드 시트 타이틀')
sh = gc.open('products')

# worksheets() 메소드는 테스트용 시트안에 나누어진 개별 시트를 리스트로 반환합니다.
# sheet.get_all_records()는 개별 시트안에 있는 모든 데이터를 key, value값으로 반환 합니다.
# key는 스프레드 시트에서 첫번째 row가 key값이 되며, 2번째 row부터는 value값으로 가져 옮니다.

for sheet in sh.worksheets():
    title = sheet.title
    print(title)
    for data in sheet.get_all_records():
        if title == 'users':
        	# 리스트로 만드셔서 bulk_create 쓰셔도 됩니다~
            User(
                id = data['id'],
                phone_number = data['phone_number'],
                name = data['name'],
                password = data['password'],
                sex = data['sex'],
                admin = data['admin']
            ).save()
profile
글쎄...?

1개의 댓글

comment-user-thumbnail
2022년 3월 30일

안녕하세요. 해당 포스팅을 잘 보았습니다.
궁금한게 있습니다.

ValueError: Out of range float values are not JSON compliant
이런 에러가 발생하는데 해결방안을 혹시 아시나요??

답글 달기