postgresql - 如何使用 python 通过 ssh 连接 aws postgres db
问题描述
我在 AWS 上有一个 Postgres 数据库,目前我们通过提供以下信息使用 postico 客户端连接它 - DB 主机 DB 端口 DB 用户名 DB 密码 DB 名称 SSH 主机(它是域) SSH 端口 SSH 私钥 在此期间,我习惯了我的组织 VPN。但是现在我必须用 python 代码连接它,我相信当我可以用 postico 连接时,我也应该通过代码。我使用了下面的代码,但无法连接到数据库并获取记录,所以任何人都可以提供想法或示例代码?-
def __init__(self, pgres_host, pgres_port, db, ssh, ssh_user, ssh_host, ssh_pkey):
# SSH Tunnel Variables
self.pgres_host = pgres_host
self.pgres_port = pgres_port
if ssh == True:
self.server = SSHTunnelForwarder(
(ssh_host, 22),
ssh_username=ssh_user,
ssh_private_key=ssh_pkey,
remote_bind_address=(pgres_host, pgres_port),
)
server = self.server
server.start() #start ssh server
self.local_port = server.local_bind_port
print(f'Server connected via SSH || Local Port: {self.local_port}...')
elif ssh == False:
pass
def query(self, db, query, psql_user, psql_pass):
engine = create_engine(f'postgresql://{psql_user}:{psql_pass}@{self.pgres_host}:{self.local_port}/{db}')
print (f'Database [{db}] session created...')
print(f'host [{self.pgres_host}]')
self.query_df = pd.read_sql(query,engine)
print ('<> Query Sucessful <>')
engine.dispose()
return self.query_df
pgres = Postgresql_connect(pgres_host=p_host, pgres_port=p_port, db=db, ssh=ssh, ssh_user=ssh_user, ssh_host=ssh_host, ssh_pkey=ssh_pkey)
print(ssh_pkey)
query_df = pgres.query(db=db, query='Select * from table', psql_user=user, psql_pass=password)
print(query_df)
解决方案
创建 ssh 隧道后,就像在本地进行连接一样
推荐阅读
- numpy - python numpy/scipy 缩放更改中心
- llvm - 在 llvm 结构之间转换
- java - 具有 Object 类型的成员变量的 Java 类
- python - Python将字符串列表简化为字符串
- flutter - 每次切换屏幕时 Flutter Webview 都会重新加载
- ruby-on-rails - 如何使用 devise_token_auth 打开对我的应用程序的 API 请求?
- html - 什么是框架的最佳替代品。我需要一个屏幕上的 2 个窗口,我可以使用像框架一样的垂直滑块来调整宽度
- python - 协程在读/写共享资源时是否需要锁?
- batch-file - 如何替换cmd中的字符串?
- c++ - 在这两种情况中会导致内存泄漏