此次整理了 pygsheets – Google Spreadsheets Python API 的官方文件,了解如何用 Python 串接 Google Sheet 來當作資料庫使用,從 Pygsheets 安裝、Python連結 Google Sheet API、到基礎資料庫的 CRUD 應用,本篇描述 Python 做 GoogleSheet 的新增欄位 Create、讀取資料 Read、更新數據 Update 和刪除Delete,提供大家參考。
Table
ㄧ. Python 連結 Google Sheet API
1. 首先建立 Google Cloud Platform 帳號,選擇 Google Sheet API 啟用
2. 點選建立憑證 > 服務帳戶,並將金鑰 json 檔儲存於桌面。
3. 在 Google Sheet 裡面,授權給剛剛在 GCP 申請的服務帳號 ID
以上就完成基礎設定了~
二. Python 新增 GoogleSheet 資料
安裝 pygsheets 套件:
1 |
$pip3 install pygsheets |
初始設定 import 這次會使用到的 pygsheets 外,gc 這邊是告訴 Python 我們的授權金鑰 json 放置的位子。
1 2 |
import pygsheets gc = pygsheets.authorize(service_file='/Users/max/Desktop/Google python.json') |
1.利用 Python 開啟 GoogleSheet
1 2 3 |
sht = gc.open_by_url( 'https://docs.google.com/spreadsheets/d/1Mx2Xzv-WJnQuE0AyCo-DGHMVdmOrLAr7akrf8_rwwL4/' ) |
2.查看此 GoogleSheet 內 Sheet 清單
1 2 |
wks_list = sht.worksheets() print(wks_list) |
3.選取要 Sheet 清單
1 2 3 4 5 6 7 8 9 10 11 |
#選取by順序 wks = sht[0] #選取by名稱 wks2 = sht.worksheet_by_title("Sheet2") #更新名稱 wks.title = "NewTitle" #隱藏清單 wks.hidden = False |
三. Python 讀取 GoogleSheet 資料
Python 做 GoogleSheet 讀取資料的部分,除了匯出成 CSV 處理外,也可以單獨用 cell 讀取 value 或是欄位。
1 2 3 4 5 6 7 8 9 10 |
#讀取 A1 = wks.cell('A1') A1.value #讀取成 df df = pd.DataFrame(wks.get_all_records()) #讀取 df 也可以這樣寫 wk1.get_as_df() #匯出CSV wks.export(pygsheets.ExportType.CSV) |
四. Python 更新 GoogleSheet 資料
Python 做 GoogleSheet 的修改資料,利用 update_cell 語法可以修改單獨欄位的值,update_cells 可以修改多個欄位。
1 2 3 4 5 6 |
# dataframe to worksheet wk1.set_dataframe(df, 'A1') #從欄位 A1 開始 # 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。
1 2 3 4 5 |
# 清除sheet內所有值 wks.clear() # 刪除sheet sht.del_worksheet(wks) |
六. Python 串接 GoogleSheet 的其他應用
set_dataframe :可以匯入 Dataframe 資料
share :可以授權權限
remove_permissions: 移除權限語法
1 2 3 4 5 6 7 8 |
#在資料最後面,匯入 Dataframe wks.set_dataframe(df, start = "A"+str(len(wks.get_all_values())+1) ,copy_head=False) # 授權 # 移除權限 |
延伸閱讀:
- 【資料庫筆記】 Python 使用 MySQL資料庫的教學與安裝
- 【資料庫筆記】Python 使用 BigQuery 的操作與安裝
- 【資料庫筆記】 Flask-SQLAlchemy 資料庫連線&設定入門(一)
- 【資料庫筆記】 Flask-SQLAlchemy 資料庫操作-ORM篇(二)
那 [資料庫筆記] Python 串接 GoogleSheet 新增、讀取、更新和刪除 就到這邊感謝收看,如文章內容有誤請不吝指正!
在〈[資料庫筆記] Python 串接 GoogleSheet 新增、讀取、更新和刪除〉中有 9 則留言
很仔細~~西忘能看到你更多文章:)
肉身實測,建議在施作添加資料時,加上 fit = True
#在資料最後面,匯入Dataframe
wks.set_dataframe(df, start = “A”+str(len(wks.get_all_values())+1) ,copy_head=False,fit = True)
請問如果print回來中文都是亂碼,如:
[u’\u4e2d\u6587′, u’\u8a66\u9a57′, u’\u5c0f\u660e’, ”, ”]
該如何解決?謝謝!
HI, HFX
以下供您參考
print(type(u’\u4e2d\u6587′))
print(u’\u4e2d\u6587′.encode(‘utf-8’).decode(‘utf-8’))
>>> class ‘str’
>>> 中文
您好!
感謝您旳分享~
其中,
#匯出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’}
HI Peter,
從您提供的資訊中 ‘status’: ‘403’,看起來是對 google sheet 讀取權限不夠,以上是我的猜測,
方便私訊提供更完整的代碼嗎?
想要更新的時候出現了這個東西,怎麽辦
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
Hi Sadpuppy,
>>> TypeError: update_cell() takes 1 positional argument but 3 were given
錯誤訊息是說你放太多參數進去了,如果要一次修改多個欄位的話,請用 update_cells 喲
寫的太好了…
請問能多寫一下,如何串Line機器人媽?
留言功能已關閉。