欢迎光临
我们一直在努力

Google sheets如何与MySQL或者SqlServer保持同步

对于个人站长或小型业务而言,Google Sheets是收集和管理数据的一个非常便捷的工具。然而,当这些数据需要被网站应用程序调用时(例如展示产品列表、用户反馈),就需要将其同步到高性能的数据库,如MySQL。

本文将详细指导您如何利用运行在您的VPS上的Python脚本,自动读取Google Sheets的数据,并将其高效同步到MySQL数据库。

步骤一:Google Sheets API准备工作

要让脚本访问您的表格,您需要启用Google Sheets API并创建一个服务账户。

  1. 创建Google Cloud项目并启用API:
    登录Google Cloud Console,创建一个新项目,然后在“API和服务”中搜索并启用 Google Sheets API
  2. 创建服务账户凭证:
    在“凭证”页面,创建“服务账户”。为服务账户命名,并下载生成的JSON密钥文件。将此文件安全地存储在您的VPS上,例如命名为 credentials.json
  3. 共享表格:
    找到您要同步的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 来定时运行这个脚本。例如,如果您希望每小时同步一次数据:

  1. 编辑 Cron 表:
crontab -e
  1. 添加任务行: 假设您的脚本存储在 /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数据库,从而保证您的网站数据源的实时性。

【本站文章皆为原创,未经允许不得转载】:汤不热吧 » Google sheets如何与MySQL或者SqlServer保持同步
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址