如何使用Python连接到远程PostgreSQL数据库

Ale*_*lex 29 python postgresql ssl python-2.7 python-3.6

我想通过Python连接到远程PostgreSQL数据库来进行一些基本的数据分析.这个数据库需要SSL(verify-ca)以及三个文件(我有):

  • 服务器根证书文件
  • 客户端证书文件
  • 客户端密钥文件

我找不到一个描述如何与Python建立连接的教程.任何帮助表示赞赏.

mha*_*wke 46

使用该psycopg2模块.

您需要在连接字符串中使用ssl选项,或将它们添加为关键字参数:

import psycopg2

conn = psycopg2.connect(dbname='yourdb', user='dbuser', password='abcd1234', host='server', port='5432', sslmode='require')
Run Code Online (Sandbox Code Playgroud)

在这种情况下,sslmode指定需要SSL.

要执行服务器证书验证,您可以设置sslmodeverify-fullverify-ca.您需要提供服务器证书的路径sslrootcert.还要分别为客户端证书和密钥设置sslcertsslkey值.

它在PostgreSQL 连接字符串文档(参见参数关键字)和SSL支持中有详细解释.

  • 在django中,如果你指定类似:''OPTIONS':{'sslmode':'verify-full','sslrootcert':'/ etc/pki/CA/certs/corpund.pem'}`作为额外'选项'到你的DATABASES ['默认'] dict. (7认同)
  • 请注意,根据 [psycopg2 文档](http://initd.org/psycopg/docs/module.html),“database”是“dbname”的已弃用别名。 (2认同)

小智 10

您还可以使用带有 paramiko 和 sshtunnel 的 ssh 隧道:

import psycopg2
import paramiko
from sshtunnel import SSHTunnelForwarder

mypkey = paramiko.RSAKey.from_private_key_file('/path/to/private/key')

tunnel =  SSHTunnelForwarder(
        (host_ip, 22),
        ssh_username=username,
        ssh_pkey=mypkey,
        remote_bind_address=('localhost', psql_port))

tunnel.start()
conn = psycopg2.connect(dbname='gisdata', user=psql_username, password=psql_password, host='127.0.0.1', port=tunnel.local_bind_port)
Run Code Online (Sandbox Code Playgroud)