对于个人站长或小型业务而言,Google Sheets是收集和管理数据的一个非常便捷的工具。然而,当这些数据需要被网站应用程序调用时(例如展示产品列表、用户反馈),就需要将其同步到高性能的数据库,如MySQL。
本文将详细指导您如何利用运行在您的VPS上的Python脚本,自动读取Google Sheets的数据,并将其高效同步到MySQL数据库。
步骤一:Google Sheets API准备工作
要让脚本访问您的表格,您需要启用Google Sheets API并创建一个服务账户。
- 创建Google Cloud项目并启用API:
登录Google Cloud Console,创建一个新项目,然后在“API和服务”中搜索并启用 Google Sheets API。 - 创建服务账户凭证:
在“凭证”页面,创建“服务账户”。为服务账户命名,并下载生成的JSON密钥文件。将此文件安全地存储在您的VPS上,例如命名为 credentials.json。 - 共享表格:
找到您要同步的Google Sheet。复制服务账户的电子邮件地址(格式通常是 xxx@xxx.iam.gserviceaccount.com),然后进入您的Google Sheet,点击右上角的“共享”,将表格的编辑权限分享给该服务账户。
步骤二:VPS环境配置
假设您使用的是基于Linux的VPS(如CentOS或Ubuntu)。
您需要安装Python 3和必要的库:Google API Client Libraries 和 MySQL 连接器。
# 适用于 Debian/Ubuntu 系统
sudo apt update
sudo apt install python3 python3-pip -y
# 安装必要的 Python 库
pip3 install google-auth google-api-python-client mysql-connector-python
步骤三:Python同步脚本编写
我们创建一个名为 sync_sheet.py 的脚本。本示例假设您的表格数据有三列:id, name, status。
重要提示: 数据库表结构必须与您的表格列数匹配。
# sync_sheet.py
import json
import mysql.connector
from google.oauth2.service_account import Credentials
from googleapiclient.discovery import build
# --- 配置信息 ---
SCOPES = ['https://www.googleapis.com/auth/spreadsheets.readonly']
SERVICE_ACCOUNT_FILE = 'credentials.json' # 步骤一中下载的文件
SPREADSHEET_ID = 'YOUR_SPREADSHEET_ID' # 替换为您的Google Sheet ID
RANGE_NAME = 'Sheet1!A2:C' # 从第二行开始读取A、B、C列
DB_CONFIG = {
'host': 'localhost',
'user': 'db_user',
'password': 'db_password',
'database': 'website_data'
}
DB_TABLE = 'sheet_sync_data'
# --- 1. Google Sheets API认证和数据读取 ---
def get_sheet_data():
"""认证并读取 Google Sheets 数据"""
print("开始认证 Google Sheets API...")
# 使用服务账户文件进行认证
creds = Credentials.from_service_account_file(
SERVICE_ACCOUNT_FILE, scopes=SCOPES)
try:
service = build('sheets', 'v4', credentials=creds)
sheet = service.spreadsheets()
result = sheet.values().get(
spreadsheetId=SPREADSHEET_ID, range=RANGE_NAME).execute()
values = result.get('values', [])
print(f"成功读取到 {len(values)} 行数据")
return values
except Exception as e:
print(f"读取Google Sheets时发生错误: {e}")
return []
# --- 2. MySQL数据库操作 ---
def sync_to_mysql(data):
"""将数据同步到MySQL"""
if not data:
print("没有数据需要同步。")
return
try:
conn = mysql.connector.connect(**DB_CONFIG)
cursor = conn.cursor()
# 1. 清空现有数据 (简化处理,如果需要增量更新,请使用 UPSERT/REPLACE INTO)
print(f"清空表 {DB_TABLE}...")
cursor.execute(f"TRUNCATE TABLE {DB_TABLE}")
# 2. 插入新数据
sql = f"INSERT INTO {DB_TABLE} (id, name, status) VALUES (%s, %s, %s)"
insert_count = 0
for row in data:
# 确保行数据与SQL语句的参数匹配
if len(row) >= 3:
cursor.execute(sql, tuple(row[:3])) # 只取前三列
insert_count += 1
conn.commit()
print(f"成功插入 {insert_count} 条记录到 MySQL。")
except mysql.connector.Error as err:
print(f"MySQL同步错误: {err}")
finally:
if 'conn' in locals() and conn.is_connected():
cursor.close()
conn.close()
print("数据库连接关闭。")
if __name__ == '__main__':
sheet_data = get_sheet_data()
sync_to_mysql(sheet_data)
步骤四:设置定时任务(Cron Job)
要实现定期同步,您可以在VPS上使用 crontab 来定时运行这个脚本。例如,如果您希望每小时同步一次数据:
- 编辑 Cron 表:
crontab -e
- 添加任务行: 假设您的脚本存储在 /home/user/scripts/sync_sheet.py。
# 格式: 分 时 日 月 周 命令
# 每天0点, 6点, 12点, 18点执行一次同步
0 0,6,12,18 * * * /usr/bin/python3 /home/user/scripts/sync_sheet.py >> /var/log/sheet_sync.log 2>&1
保存并退出。现在,您的Google Sheets数据将按照设定的时间自动同步到您的MySQL数据库,从而保证您的网站数据源的实时性。
汤不热吧