gpt4 book ai didi

python - 密码验证失败,密码复杂

转载 作者:太空狗 更新时间:2023-10-30 03:00:37 24 4
gpt4 key购买 nike

我编写了一个 Python 脚本,它使用 psycopg2 2.6Python 2.7.8 连接到本地 PostgreSQL 数据库。连接设置和命令如下:

HOST = '127.0.0.1'
DATABASE_NAME = 'myappdatabase'
DATABASE_PORT = '5432'
DATABASE_USER = 'myappuser'
DATABASE_PASSWORD = 'secret'
DATABASE_TABLE = 'myappdata'

def _database_connection():
conn_string = "host='{0}' dbname='{1}' port='{2}' user='{3}' \
password='{4}'".format(HOST, DATABASE_NAME, DATABASE_PORT, \
DATABASE_USER, DATABASE_PASSWORD)
return psycopg2.connect(conn_string)

脚本在安装了 PostgreSQL 9.4 的机器上运行没有问题。 sudo vi/etc/postgresql/9.4/main/pg_hba.conf 中的配置没有修改,看起来像这样,没有注释:

local   all             postgres                                peer
local all all peer
host all all 127.0.0.1/32 md5
host all all ::1/128 md5

我也可以使用 pgAdmin III 成功连接到同一个数据库。

问题

在具有相同设置的第二台机器上,我无法通过脚本连接。出现以下错误:

psycopg2.OperationalError: FATAL: password authentication failed for user "myappuser"
FATAL: password authentication failed for user "myappuser"

这两台机器之间唯一的区别数据库密码。所以我将其更改为一个简单的密码 - 砰的一声,它起作用了。所以我把它改回了一个复杂的...并且它再次工作。密码是这样的:

DATABASE_PASSWORD = 'zyx@12AA\w2'

所以我想:“这很愚蠢。这一定是我的错。”所以我将第一台机器上的数据库密码设置为与第二台机器上的相同。而且 Python 脚本也失败

最佳答案

在这种情况下,密码中的反斜杠被解释为转义字符。 Python 会将 \w 中的反斜杠视为文字 \,即使它未指定为原始字符串,因为 \w 不是有效的转义序列,但底层库也是parses escape sequences ,因此反斜杠必须转义(加倍)。

为避免这种情况,请指定连接参数 as keyword arguments相反:

psycopg2.connect(host=HOST,
database=DATABASE_NAME,
port=DATABASE_PORT,
user=DATABASE_USER,
password=DATABASE_PASSWORD)

这避免了密码中特殊字符的问题。密码中的单引号字符也会破坏连接字符串。

关于python - 密码验证失败,密码复杂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28589743/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com