我的目标是当我通过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 "
感谢您的帮助
答案 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))
应该首选第一种形式。