python 使用 libpq-pgpass 连接到 postgresql

python connect to postgresql with libpq-pgpass

我读到有一种更安全的方法可以连接到 postgresql 数据库,而无需使用 http://www.postgresql.org/docs/9.2/static/libpq-pgpass.html 在源代码中指定密码。但不幸的是,我找不到任何有关如何将其导入我的 python 程序以及如何使我的 postgresql 服务器使用此文件的示例。请帮忙

您不会将其导入到您的 Python 程序中。 .pgpass的意义在于它是受制于系统文件权限的常规文件,而libpq驱动其中的库如psycopg2 用于连接到 Postgres 将在该文件中查找密码,而不是要求密码在源代码中或提示输入密码。

此外,这不是服务器端文件,而是客户端文件。因此,在 *nix 机器上,您将有一个 ~/.pgpass 文件,其中包含您希望能够建立的各种连接的凭据。

根据 OP 的评论进行编辑:

为了让 psycopg2 通过 .pgpass 正确验证,需要发生两件主要的事情:

  1. 不要不要在传递给psycopg2.connect
  2. 的字符串中指定密码
  3. 确保为将通过 psycopg2.
  4. 连接的用户将正确的条目添加到 .pgpass 文件中

例如,要使此操作适用于 localhost 端口 5432 上特定用户的所有数据库,您可以添加以下行到该用户的 .pgpass 文件:

localhost:5432:*:<username>:<password>

然后 connect 调用将是这种形式:

conn = psycopg2.connect("host=localhost dbname=<dbname> user=<username>")

libpq psycopg2 使用的底层驱动程序将利用 .pgpass 文件获取密码。

#!/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()