-1

我的目标是在我通过 python3 连接到 postgresql 数据库时使用 getpass 隐藏我的密码条目。我在 jyputer 笔记本上使用 python3。

这很好用:

connect = psycopg2.connect("dbname='db_toto' user='dad' host='xx.xx.xxx.x' port='5432' password='123456'")
cur = connect.cursor()

但是当我尝试使用单独的变量输入密码时,它不再起作用:

pw = getpass.getpass() 
####Python ask me to tape password and i tape the same '123456'

验证 :

'123456'

connect=psycopg2.connect("dbname='db_toto' user='dad' host='xx.xx.xxx.x' port='5432' password=pw")
cur=connect.cursor()

" OperationalError: FATAL:  password authentication failed for user
FATAL:  password authentication failed for user "

收到错误信息

谢谢你的帮助

4

1 回答 1

0

你正在做的是将一个字符串传递给connect函数。该字符串的值为"dbname='db_toto' user='dad' host='xx.xx.xxx.x' port='5432' password=pw"。该psycopg2模块无法知道是什么pw。我怀疑它将被转换为字符串 ( 'pw'),但我不确定。

无论如何,正确的方法是将关键字参数传递给connect函数,如下所示:

connect = psycopg2.connect(dbname='db_toto' user='dad' host='xx.xx.xxx.x' port='5432' password=pw)
# Notice the lack of double-quotes in the arguments

这样,您将pw变量的内容传递给函数,而不是 name pw

也可以以pw字符串形式传递变量的内容,如下所示:

connect = psycopg2.connect("dbname='db_toto' user='dad' host='xx.xx.xxx.x' port='5432' password='{}'".format(pw))

应该首选第一种形式。

于 2018-10-12T09:15:51.800 回答