sshtunnel 建立数据库通道连接

本文探讨了在使用SSH隧道进行远程数据库连接时,如何有效管理数据库连接,特别是在Python环境下利用with语句作为上下文管理器时,如何避免连接提前关闭的问题。文章详细解释了直接返回连接对象的局限性,并提出通过返回函数来保持连接活性的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

with SSHTunnelForwarder((settings.ssh_host, settings.ssh_port),
                        ssh_password=settings.ssh_password, ssh_username=settings.ssh_username,
                        remote_bind_address=(settings.host, settings.port)) as server:

    conn = psycopg2.connect(
        host='localhost',
        port=server.local_bind_port,
        database=settings.database,
        user=settings.user,
        password=settings.password
    )
    cursor = conn.cursor()
    sql = '''
            insert into trend(
                    new_listings,homes_sold,average_days_on_market,selling_to_listing_price_ratio,city,"createdDate")
                     values(72,30,32,0.96,'East Gwillimbury',now())
        '''
    cursor.execute(sql)
    conn.commit()
    return 'successful'

关于以前这个程序无法在外面引用conn,但是函数里面就能使用conn的问题:

今天终于知道了,就是 with as 这个上下文管理器,太坑了;

你可以通过返回一个函数的形式让这个上下文管理器不关闭继续使用:如:return query_fn(conn)

但是如果你直接return conn 这时候,ssh隧道连接已经关闭了,conn已经没有作用了;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值