Python on Azure Function error is "OperationalError: (psycopg2.OperationalError) could not translate host name "Mypassword@database_ip" to address"

Python on Azure Function error is "OperationalError: (psycopg2.OperationalError) could not translate host name "Mypassword@database_ip" to address"

我有一个 python 函数连接到 Azure Postgresql 并选择查询一些行。在本地 运行 没有问题。当我在 Azure 和 运行 上发布时,我收到以下错误:

OperationalError: (psycopg2.OperationalError) could not translate host name "Mypassword@database_ip" to address

我不知道为什么要将连接格式更改为 db_password@db_ip,如您在屏幕截图中所见。

我的函数是:

def get_engine(database='db_name', username='username', password='@password', host='ip', port=5432):
    engine_string = f"postgresql+psycopg2://{username}:{password}@{host}:{port}/{database}"
    engine = sqlalchemy.create_engine(engine_string)
    print("Database connection done!")
    return engine

您密码中的文字 @ 需要 URI encoded

您可以使用 engine.URL.create 来防止用户名、密码等中出现“特殊字符”,而不是使用纯字符串格式:

import sqlalchemy as sa

# …

url = sa.engine.URL.create(
    drivername="postgresql+psycopg2",
    username="username",
    password="@password",
    host="ip",
    port=5432,
    database="database",
)
print(url)  # postgresql+psycopg2://username:%40password@ip:5432/database
engine = sa.create_engine(url)
``