将getpass与psycog一起用于密码管理的问题

时间:2018-10-12 08:57:43

标签: python python-3.5 psycopg2 postgresql-9.3 getpass

我的目标是当我通过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 "

received error message

感谢您的帮助

1 个答案:

答案 0 :(得分: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变量的内容而不是名称pw传递给函数。

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

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

应该首选第一种形式。