如何连接 Python 到 Heroku Postgres 数据库? #Error 没有加密

How to Connect Python to Heroku Postgres Database? #Error no encryption

我正在尝试建立与 Heroku Postgres 数据库的连接并收到此错误:

psycopg2.OperationalError:
FATAL:  password authentication failed for user "hdyarfoicbluoo"
FATAL:  no pg_hba.conf entry for host "95.92.208.27", user "hdyarfoicbluoo", database "d7jcaupbs6m4ud", no encryption

我的代码是:

import psycopg2

conn = psycopg2.connect( dbname=DB_NAME, user=DB_USER, password=DB_PASS, host=DB_HOST)

conn.close()

期待得到答复。

我尝试使用 DATABASE_URL 但也不起作用:

conn = psycopg2.connect(DATABASE_URL, sslmode='require')
Traceback (most recent call last): File "/home/aluno-di/Desktop/dbaccess.py", line 9, in <module>
DATABASE_URL = os.environ['postgres://hdyarfoicbluoo:xxxx@ec2-63-32-248-14.eu-west-1.compute.amazonaws.com:5432/d7jcaupbs6m4ud'] File "/usr/lib/python3.8/os.py", line 675, in __getitem__ raise KeyError(key) from None KeyError: 'postgres://hdyarfoicbluoo:xxxxx@ec2-63-32-248-14.eu-west-1.compute.amazonaws.com:5432/d7jcaupbs6m4ud'

在第一种情况下,您缺少 sslmode 参数:

conn = psycopg2.connect(
    dbname=DB_NAME,
    user=DB_USER,
    password=DB_PASS,
    host=DB_HOST,
    sslmode="require",  # <-- Here
)

但是最好使用 DATABASE_URL 环境变量,就像您在第二个示例中尝试做的那样。 Heroku 可能随时更改您的数据库凭据,始终使用此变量是确保您的应用程序继续工作的最佳方式。

将连接字符串存储在环境变量中的全部意义在于,您不必将它们直接放入代码中。使用环境变量的 name 检索其值。

像这样的东西应该可以工作:

DATABASE_URL = os.environ["DATABASE_URL"]

conn = psycopg2.connect(DATABASE_URL)