06 Python 資料庫教學10 所有文章

[資料庫筆記] Python 串接 GoogleSheet 新增、讀取、更新和刪除

python_pygsheet

此次整理了 pygsheets – Google Spreadsheets Python API 的官方文件,了解如何用 Python 串接 Google Sheet 來當作資料庫使用,從 Pygsheets 安裝、Python連結 Google Sheet API、到基礎資料庫的 CRUD 應用,本篇描述 Python 做 GoogleSheet 的新增欄位 Create、讀取資料 Read、更新數據 Update 和刪除Delete,提供大家參考。

ㄧ. Python 連結 Google Sheet API

1. 首先建立 Google Cloud Platform 帳號,選擇 Google Sheet API 啟用

GoogleSheet_API
GoogleSheet_API

2. 點選建立憑證 > 服務帳戶,並將金鑰 json 檔儲存於桌面。

建立憑證 GCP

3. 在 Google Sheet 裡面,授權給剛剛在 GCP 申請的服務帳號 ID

googlesheet
googlesheet

以上就完成基礎設定了~

二. Python 新增 GoogleSheet 資料

安裝 pygsheets 套件:

$pip3 install pygsheets

初始設定 import 這次會使用到的 pygsheets 外,gc 這邊是告訴 Python 我們的授權金鑰 json 放置的位子。

import pygsheets
gc = pygsheets.authorize(service_file='/Users/max/Desktop/Google python.json')

1.利用 Python 開啟 GoogleSheet

sht = gc.open_by_url(
'https://docs.google.com/spreadsheets/d/1Mx2Xzv-WJnQuE0AyCo-DGHMVdmOrLAr7akrf8_rwwL4/'
)

2.查看此 GoogleSheet 內 Sheet 清單

wks_list = sht.worksheets()
print(wks_list)

3.選取要 Sheet 清單

#選取by順序
wks = sht[0]

#選取by名稱
wks2 = sht.worksheet_by_title("Sheet2")

#更新名稱
wks.title = "NewTitle"

#隱藏清單
wks.hidden = False

三. Python 讀取 GoogleSheet 資料

Python 做 GoogleSheet 讀取資料的部分,除了匯出成 CSV 處理外,也可以單獨用 cell 讀取 value 或是欄位。

#讀取
A1 = wks.cell('A1')
A1.value
#匯出CSV
wks.export(pygsheets.ExportType.CSV)

四. Python 更新 GoogleSheet 資料

Python 做 GoogleSheet 的修改資料,利用 update_cell 語法可以修改單獨欄位的值,update_cells 可以修改多個欄位。

# Update
wks.update_cell('A1', "Hey yank this numpy array")
wks3.update_cells('A2:A5',[['name1'],['name2'],['name3'],['name4']])

 五. Python 刪除 GoogleSheet 資料

Python 做 GoogleSheet 利用 clear 可清除所有值,del_worksheet 可刪除Sheet。

# 清除sheet內所有值 
wks.clear()
 
# 刪除sheet
sht.del_worksheet(wks) 

 六. Python 串接 GoogleSheet 的其他應用

set_dataframe :可以匯入 Dataframe 資料
share :可以授權權限
remove_permissions: 移除權限語法

#在資料最後面,匯入 Dataframe
wks.set_dataframe(df, start = "A"+str(len(wks.get_all_values())+1) ,copy_head=False)

# 授權
sht.share("[email protected]")

# 移除權限
sht.remove_permissions("[email protected]")

延伸閱讀:

那 [資料庫筆記] Python 串接 GoogleSheet 新增、讀取、更新和刪除 就到這邊感謝收看,如文章內容有誤請不吝指正!

在〈[資料庫筆記] Python 串接 GoogleSheet 新增、讀取、更新和刪除〉中有 8 則留言

  1. 肉身實測,建議在施作添加資料時,加上 fit = True
    #在資料最後面,匯入Dataframe
    wks.set_dataframe(df, start = “A”+str(len(wks.get_all_values())+1) ,copy_head=False,fit = True)

  2. 請問如果print回來中文都是亂碼,如:
    [u’\u4e2d\u6587′, u’\u8a66\u9a57′, u’\u5c0f\u660e’, ”, ”]
    該如何解決?謝謝!

    1. HI, HFX

      以下供您參考
      print(type(u’\u4e2d\u6587′))
      print(u’\u4e2d\u6587′.encode(‘utf-8’).decode(‘utf-8’))

      >>> class ‘str’
      >>> 中文

  3. 您好!
    感謝您旳分享~
    其中,
    #匯出CSV
    wks.export(pygsheets.ExportType.CSV)
    執行後出現errMsg如下:(不知該如何處理?)
    File “C:\Users\TJ\Anaconda3\lib\site-packages\googleapiclient\http.py”, line 740, in next_chunk: [HttpError] {‘vary’: ‘Origin, X-Origin’, ‘content-type’: ‘application/json; charset=UTF-8’, ‘date’: ‘Sat, 11 Apr 2020 04:14:08 GMT’, ‘expires’: ‘Sat, 11 Apr 2020 04:14:08 GMT’, ‘cache-control’: ‘private, max-age=0’, ‘x-content-type-options’: ‘nosniff’, ‘x-frame-options’: ‘SAMEORIGIN’, ‘content-security-policy’: “frame-ancestors ‘self'”, ‘x-xss-protection’: ‘1; mode=block’, ‘content-length’: ‘957’, ‘server’: ‘GSE’, ‘alt-svc’: ‘quic=”:443″; ma=2592000; v=”46,43″,h3-Q050=”:443″; ma=2592000,h3-Q049=”:443″; ma=2592000,h3-Q048=”:443″; ma=2592000,h3-Q046=”:443″; ma=2592000,h3-Q043=”:443″; ma=2592000,h3-T050=”:443″; ma=2592000’, ‘status’: ‘403’}

    1. HI Peter,

      從您提供的資訊中 ‘status’: ‘403’,看起來是對 google sheet 讀取權限不夠,以上是我的猜測,

      方便私訊提供更完整的代碼嗎?

  4. 想要更新的時候出現了這個東西,怎麽辦

    Traceback (most recent call last):
    File “e:/PY/test.py”, line 29, in
    wks.update_cell(‘A1’, “Hey yank this numpy array”)
    File “C:\Users\great\AppData\Local\Programs\Python\Python38\lib\site-packages\pygsheets\utils.py”, line 163, in wrapper
    return func(*args, **kwargs)
    TypeError: update_cell() takes 1 positional argument but 3 were given

    1. Hi Sadpuppy,

      >>> TypeError: update_cell() takes 1 positional argument but 3 were given

      錯誤訊息是說你放太多參數進去了,如果要一次修改多個欄位的話,請用 update_cells 喲

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *