0

我现在已经苦苦挣扎了很长时间,仍然无法使这行代码正常工作:

os.system('su - postgres -c "psql -c \'ALTER USER postgres WITH ENCRYPTED PASSWORD \\\"{0}\\\";\'"'.format(self.password))

并记录结果:

2013-11-12 19:58:42 ICT ERROR:  syntax error at or near ""password"" at character 45
2013-11-12 19:58:42 ICT STATEMENT:  ALTER USER postgres WITH ENCRYPTED PASSWORD "password";

任何想法 ?

4

2 回答 2

3

呃。如果可能,请使用psycopg2PostgreSQL 的本机 Python 客户端驱动程序。

如果您必须掏出钱psql,请使用subprocess模块的check_call功能,因为它会为您处理报价,因此更容易和更安全。

import subprocess
subprocess.check_call([
    'psql', '-c',
    'ALTER USER postgres WITH ENCRYPTED PASSWORD "{0}";'.format(self.password)
])

os.system真的应该是最后的手段IMO。

于 2013-11-12T13:39:21.943 回答
0

密码应该用单引号 -

postgres=# create user usr with password "password";
ERROR:  syntax error at or near ""password""
LINE 1: create user usr with password "password";
                                      ^
postgres=# create user usr with password 'password';
CREATE ROLE
于 2013-11-12T13:14:32.357 回答