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