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
正确验证,需要发生两件主要的事情:
- 不要不要在传递给
psycopg2.connect
的字符串中指定密码
- 确保为将通过 psycopg2.
连接的用户将正确的条目添加到 .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()
我读到有一种更安全的方法可以连接到 postgresql 数据库,而无需使用 http://www.postgresql.org/docs/9.2/static/libpq-pgpass.html 在源代码中指定密码。但不幸的是,我找不到任何有关如何将其导入我的 python 程序以及如何使我的 postgresql 服务器使用此文件的示例。请帮忙
您不会将其导入到您的 Python 程序中。 .pgpass
的意义在于它是受制于系统文件权限的常规文件,而libpq驱动其中的库如psycopg2 用于连接到 Postgres 将在该文件中查找密码,而不是要求密码在源代码中或提示输入密码。
此外,这不是服务器端文件,而是客户端文件。因此,在 *nix 机器上,您将有一个 ~/.pgpass
文件,其中包含您希望能够建立的各种连接的凭据。
根据 OP 的评论进行编辑:
为了让 psycopg2 通过 .pgpass
正确验证,需要发生两件主要的事情:
- 不要不要在传递给
psycopg2.connect
的字符串中指定密码
- 确保为将通过 psycopg2. 连接的用户将正确的条目添加到
.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()