python使用libpq pgpass连接到postgresql

2024-03-28 22:50:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道有一种更安全的方法可以连接到postgresql db,而不用在源代码中使用http://www.postgresql.org/docs/9.2/static/libpq-pgpass.html指定密码。但不幸的是,我找不到任何例子来说明如何将它导入到我的python程序,以及如何使postgresql服务器使用这个文件。请帮忙。


Tags: 方法org程序http密码docsdb源代码
2条回答
#!/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()

您不会将它导入到您的Python程序中。.pgpass的要点是,它是受系统文件权限限制的常规文件,库(如psycopg2用于连接Postgreslibpq驱动程序将查找此文件以获取密码,而不是要求密码在源代码中或提示输入密码。

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

根据OP的评论进行编辑:

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

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

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

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

然后connect调用的形式如下:

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

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

相关问题 更多 >