Python 密码身份验证失败,密码复杂

Python 密码身份验证失败,密码复杂,python,postgresql,passwords,psycopg2,Python,Postgresql,Passwords,Psycopg2,我编写了一个Python脚本,它使用psycopg2.6和Python2.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_con

我编写了一个Python脚本,它使用psycopg2.6和Python2.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的machine one上正常工作。
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:致命:用户“myappuser”的密码身份验证失败
致命:用户“myappuser”的密码身份验证失败

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

数据库\u密码=zyx@12AA\w2'


所以我想:“这太愚蠢了。一定是我的错误。”所以我把第一台机器上的数据库密码设置为第二台机器上的相同。哎呀,Python脚本也失败了,在这种情况下,密码中的反斜杠被解释为转义字符。Python会将
\w
中的反斜杠视为文字
\
,即使它没有被指定为原始字符串,因为
\w
不是有效的转义序列,但基础库也是如此,因此反斜杠必须转义(加倍)

要避免这种情况,请指定连接参数:


这避免了密码中特殊字符的问题。此外,密码中的单引号更改会中断连接字符串。

谢谢。我准备了连接字符串,作为打印设置以进行调试的一种方法。
psycopg2.connect(host=HOST,
                 database=DATABASE_NAME,
                 port=DATABASE_PORT,
                 user=DATABASE_USER,
                 password=DATABASE_PASSWORD)