You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python连接带SSH隧道的PostgreSQL在线数据库?

Python连接带SSH隧道的PostgreSQL数据库方案

先明确你之前的错误原因

你用了ODBC Driver 18 for SQL Server驱动去连PostgreSQL,这完全不匹配——SQL Server的驱动无法识别PostgreSQL的连接协议,所以才报驱动找不到的错误。PostgreSQL得用专门的Python适配库,再配合SSH隧道才能连接到AWS上的目标数据库。

步骤1:安装必要依赖

先装两个关键库:psycopg2-binary(PostgreSQL的Python适配库,binary包无需本地编译)和sshtunnel(用来建立SSH隧道):

pip install psycopg2-binary sshtunnel

步骤2:完整连接代码

把你的SSH和PostgreSQL配置信息填入对应位置即可,代码已加注释说明:

from sshtunnel import SSHTunnelForwarder
import psycopg2

# ---------------------- SSH配置 ----------------------
SSH_HOST = "你的SSH主机/IP"
SSH_USER = "SSH用户名"
SSH_PRIVATE_KEY_PATH = "你的私钥文件路径(比如~/.ssh/id_rsa)"

# ---------------------- PostgreSQL配置 ----------------------
PG_HOST = "[....]amazonaws.com"
PG_DB = "你的数据库名"
PG_USER = "PostgreSQL用户名"
PG_PWD = "PostgreSQL密码"
PG_PORT = 5432  # PostgreSQL默认端口,未修改的话无需改动

# 建立SSH隧道
with SSHTunnelForwarder(
    (SSH_HOST, 22),  # SSH默认端口为22,若修改过请替换
    ssh_username=SSH_USER,
    ssh_pkey=SSH_PRIVATE_KEY_PATH,
    remote_bind_address=(PG_HOST, PG_PORT)
) as tunnel:
    # 连接PostgreSQL数据库
    conn = psycopg2.connect(
        host="127.0.0.1",  # 隧道映射到本地的地址
        port=tunnel.local_bind_port,
        database=PG_DB,
        user=PG_USER,
        password=PG_PWD
    )

    # 执行只读查询(你仅拥有只读权限)
    with conn.cursor() as cur:
        cur.execute("SELECT * FROM 你的表名 LIMIT 10;")
        rows = cur.fetchall()
        for row in rows:
            print(row)

    # 关闭数据库连接
    conn.close()

注意事项

  • 如果你的私钥设有密码,在SSHTunnelForwarder中添加ssh_private_key_password="你的私钥密码"参数即可
  • 确保本地机器能正常访问SSH主机,私钥文件权限需正确设置(Linux/macOS下执行chmod 600 私钥文件路径)
  • 所有配置项需替换为你实际的信息,不要保留占位符
  • 代码中使用with语句会自动关闭隧道和数据库连接,避免资源泄漏

内容的提问来源于stack exchange,提问作者Leo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 04:20:35