[英]PostgreSQL and Python: Automated Password change
我一直在尝试自动化 Open Street Map Server 的安装,因为还没有人发布过,而且这项任务非常乏味。 为了做到这一点,我在脚本中处理 PostgreSQL 数据库,我让 Python 负责。
情况是这样的:基本上我在整个 bash 代码中运行处理数据库的 python 脚本。 我正在尝试使安装尽可能用户友好,其中一部分是自动化 PostgreSQL 设置。 我在 bash 中提示用户输入他们想用于 PostgreSQL 附带的 postgres 数据库的密码。 然后我将他们的密码作为命令行参数发送给 Python 脚本。
这是我遇到问题的脚本部分:
import psycopg2
import sys
con = None
code = sys.argv[1]
try:
con = psycopg2.connect(database='postgres', user='postgres')
cur = con.cursor()
cur.execute("ALTER USER postgres WITH PASSWORD '%s'" % code)
基本上:在我更改 postgres 数据库密码的底线,它实际上不起作用。 我知道这一点,因为后来我的 bash 脚本提示我输入密码,这导致身份验证失败。
我对此很陌生,所以如果有人有一些好的建议,将不胜感激。
请使用下面的代码,您可以生成随机密码并更新它们 注意:要使此代码起作用,在使用此代码之前,readwrite1 用户必须存在于数据库中
from psycopg2 import Error
import psycopg2
import random
#password generation
def password_generator(password_length):
# maximum length of password needed
characters = string.ascii_letters + string.digits + '!@#$%^&*()'
password = ''.join(random.choice(characters) for i in range(password_length))
return password
#define a function that handles and parses psycopg2 exceptions
def print_psycopg2_exception(err):
err_type, err_obj, traceback = sys.exc_info()
# get the line number when exception occured
line_num = traceback.tb_lineno
# print the connect() error
print ("\npsycopg2 ERROR:", err, "on line number:", line_num)
print ("psycopg2 traceback:", traceback, "-- type:", err_type)
# psycopg2 extensions.Diagnostics object attribute
print ("\nextensions.Diagnostics:", err.diag)
# print the pgcode and pgerror exceptions
print ("pgerror:", err.pgerror)
print ("pgcode:", err.pgcode, "\n")
def update_password():
password=password_generator(10)
try:
con = psycopg2.connect(host="host here",database="dbhere", user="username",password="password")
cur = con.cursor()
cur.execute("alter user readwrite1 with password %(password)s;", {'password': password})
con.commit()
except Exception as err:
# pass exception to function
print_psycopg2_exception(err)
exit(1)
finally:
print('password is: ', password)
if con:
con.close()
return password
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.