如何使用Google Apps Script通过SSH隧道连接MySQL数据库?
Google Apps Script 连接 PythonAnywhere MySQL 数据库方案
核心方案:直接JDBC连接(无需SSH隧道)
既然你的数据库已允许任意IP访问,完全可以跳过SSH隧道,直接使用Google Apps Script内置的JDBC服务连接,关键是要匹配PythonAnywhere MySQL的特定参数格式。
必备连接参数(从PythonAnywhere数据库页面获取)
- 主机地址:格式为
{你的PythonAnywhere用户名}.mysql.pythonanywhere-services.com - 端口:固定为
3306 - 数据库用户名:格式为
{你的PythonAnywhere用户名}${你的数据库名}(必须包含$符号) - 数据库密码:你在PythonAnywhere设置的数据库专属密码(≠SSH密码,除非你特意设为一致)
- 数据库名:与用户名中的后缀一致,即
{你的PythonAnywhere用户名}${你的数据库名}
完整代码示例
function fetchMySQLData() { // 替换为你的实际参数 const PYAW_USER = "your_pythonanywhere_username"; const DB_NAME = "your_database_name"; const DB_PASSWORD = "your_database_password"; // 构建连接参数 const host = `${PYAW_USER}.mysql.pythonanywhere-services.com`; const port = 3306; const fullDbName = `${PYAW_USER}$${DB_NAME}`; const jdbcUrl = `jdbc:mysql://${host}:${port}/${fullDbName}?useSSL=true&requireSSL=false`; try { // 建立数据库连接 const conn = Jdbc.getConnection(jdbcUrl, fullDbName, DB_PASSWORD); Logger.log("数据库连接成功"); // 执行查询(替换为你的SQL语句) const stmt = conn.createStatement(); const queryResult = stmt.executeQuery("SELECT * FROM your_target_table LIMIT 10"); // 解析并打印结果 const colCount = queryResult.getMetaData().getColumnCount(); while (queryResult.next()) { let rowStr = ""; for (let i = 1; i <= colCount; i++) { rowStr += `${queryResult.getMetaData().getColumnName(i)}: ${queryResult.getString(i)}, `; } Logger.log(rowStr.slice(0, -2)); // 移除末尾多余的逗号和空格 } // 关闭资源(必须执行,避免连接泄漏) queryResult.close(); stmt.close(); conn.close(); } catch (err) { Logger.log("操作失败: " + err.message); } }
关键注意事项
- 参数格式错误是常见坑:PythonAnywhere的MySQL用户名和数据库名必须包含
$分隔符,不要省略或替换为其他字符 - SSL参数配置:添加
useSSL=true&requireSSL=false是为了兼容Google JDBC驱动与PythonAnywhere MySQL的SSL策略,避免连接被拒绝 - 权限验证:确保你在PythonAnywhere的数据库页面已开启"Allow external access"选项(你已确认无IP限制,此步骤已完成)
- 测试方式:运行脚本后,查看Google Apps Script编辑器的「日志」(视图 > 日志)验证连接和查询结果
内容的提问来源于stack exchange,提问作者Nacho
相关产品推荐
相关产品推荐

