Проблема в использовании getpass с psycog для управления паролями
Моя цель - использовать getpass, чтобы скрыть ввод моего пароля при подключении к базе данных postgresql через python3. Я использую Python3 на ноутбуке Jyputer.
Это хорошо работает:
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 "
Спасибо тебе за помощь
1 ответ
То, что вы делаете, это передача строки 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))
Первая форма должна быть предпочтительной.