密码验证失败,密码复杂

2024-10-01 15:45:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我编写了一个Python脚本,它使用psycopg2.6python2.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)

该脚本在安装了postgresql9.4的机器1上正常工作。sudo vi /etc/postgresql/9.4/main/pg_hba.conf中的配置未被修改,如下所示,没有注释:

^{pr2}$

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

问题

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

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

这两台机器之间唯一的差异是数据库密码。所以我把它改成了一个简单的密码-砰,它成功了。所以我把它改回一个复杂的。。。它确实不起作用。密码如下:

DATABASE_PASSWORD = 'zyx@12AA\w2'

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


Tags: name脚本机器数据库host密码portpassword
1条回答
网友
1楼 · 发布于 2024-10-01 15:45:36

在本例中,密码中的反斜杠被解释为转义字符。Python会将\w中的反斜杠视为文本\,即使它没有被指定为原始字符串,因为{}不是有效的转义序列,但底层库也是{a1},因此反斜杠必须转义(加倍)。在

要避免这种情况,请改为指定连接参数as keyword arguments

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

这避免了密码中特殊字符的问题。另外,密码中的单引号chacacter会断开连接字符串。在

相关问题 更多 >

    热门问题