我读到有一种更安全的方式来连接到postgresql数据库而无需使用 http://www.postgresql.org/docs/9.2/static/libpq-pgpass.html 在源代码中指定密码。但不幸的是,我无法找到如何将其导入我的python程序的任何示例以及如何使我的postgresql服务器使用此文件。请帮忙。
答案 0 :(得分:18)
您无法将其导入 Python 计划。 .pgpass
的要点是它是一个受系统文件权限限制的常规文件,而 libpq 驱动程序是 psycopg2 等库使用的连接到 Postgres 将查找此文件中的密码,而不是要求密码在源代码中或提示输入密码。
此外,这不是服务器端文件,而是客户端文件。因此,在* nix框中,您将拥有一个~/.pgpass
文件,其中包含您希望能够进行的各种连接的凭据。
根据OP的评论进行编辑:
为了让 psycopg2 通过.pgpass
正确验证,需要做两件事:
psycopg2.connect
.pgpass
文件中添加了正确的条目。例如,要使此功能适用于 localhost 端口 5432 上特定用户的所有数据库,您可以将以下行添加到该用户' s { {1}}档案:
.pgpass
然后localhost:5432:*:<username>:<password>
调用就是这种形式:
connect
psycopg2 使用的基础 libpq 驱动程序将使用conn = psycopg2.connect("host=localhost dbname=<dbname> user=<username>")
文件获取密码。
答案 1 :(得分:-3)
#!/usr/bin/python
import psycopg2
import sys
import pprint
def main():
conn_string = "host='127.0.0.1' dbname='yourdatabsename' user='yourusername' password='yourpassword'"
print "Connecting to database\n ->%s" % (conn_string)
conn = psycopg2.connect(conn_string)
cursor = conn.cursor()
cursor.execute("SELECT * FROM tablename")
records = cursor.fetchall()
pprint.pprint(records)
if __name__ == "__main__":
main()