2024-03-28 22:50:27 发布
网友
我知道有一种更安全的方法可以连接到postgresql db,而不用在源代码中使用http://www.postgresql.org/docs/9.2/static/libpq-pgpass.html指定密码。但不幸的是,我找不到任何例子来说明如何将它导入到我的python程序,以及如何使postgresql服务器使用这个文件。请帮忙。
#!/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用于连接Postgres的libpq驱动程序将查找此文件以获取密码,而不是要求密码在源代码中或提示输入密码。
.pgpass
此外,这不是服务器端文件,而是客户端文件。因此,在*nix框中,您将拥有一个~/.pgpass文件,其中包含您希望能够建立的各种连接的凭据。
~/.pgpass
根据OP的评论进行编辑:
要想通过.pgpass正确验证psycopg2需要发生两件主要的事情:
psycopg2.connect
例如,要使此操作适用于localhost端口5432上特定用户的所有数据库,您可以将以下行添加到该用户的.pgpass文件中:
localhost:5432:*:<username>:<password>
然后connect调用的形式如下:
connect
conn = psycopg2.connect("host=localhost dbname=<dbname> user=<username>")
psycopg2使用的底层libpq驱动程序将利用.pgpass文件获取密码。
您不会将它导入到您的Python程序中。
.pgpass
的要点是,它是受系统文件权限限制的常规文件,库(如psycopg2用于连接Postgres的libpq驱动程序将查找此文件以获取密码,而不是要求密码在源代码中或提示输入密码。此外,这不是服务器端文件,而是客户端文件。因此,在*nix框中,您将拥有一个
~/.pgpass
文件,其中包含您希望能够建立的各种连接的凭据。根据OP的评论进行编辑:
要想通过
.pgpass
正确验证psycopg2需要发生两件主要的事情:psycopg2.connect
的字符串中指定密码.pgpass
文件中添加了正确的条目。例如,要使此操作适用于localhost端口5432上特定用户的所有数据库,您可以将以下行添加到该用户的
.pgpass
文件中:然后
connect
调用的形式如下:psycopg2使用的底层libpq驱动程序将利用
.pgpass
文件获取密码。相关问题 更多 >
编程相关推荐