【问题标题】:Python on Azure Function error is "OperationalError: (psycopg2.OperationalError) could not translate host name "Mypassword@database_ip" to address" [duplicate]Azure Function 上的 Python 错误是“OperationalError:(psycopg2.OperationalError)无法将主机名“Mypassword@database_ip”转换为地址”[重复]
【发布时间】:2021-08-26 21:40:57
【问题描述】:

我有一个 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

【问题讨论】:

  • engine_string = ... 之后在线执行print(engine_string) 以查看您实际构建的内容。发布结果作为您问题的更新。

标签: python postgresql sqlalchemy azure-functions


【解决方案1】:

您可以使用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)
``

【讨论】:

  • 我认为这在链接的欺骗目标中也非常有用。
【解决方案2】:

密码中的文字@ 必须是URI encoded

【讨论】:

    猜你喜欢
    • 2020-01-16
    • 1970-01-01
    • 1970-01-01
    • 2021-03-27
    • 2020-12-12
    • 2019-01-15
    • 2016-12-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多