从python

时间:2018-09-11 11:00:26

标签: python-2.7 amazon-redshift psycopg2

我已将redshift连接凭据存储在本地系统中的文件test.txt中。该文件的内容为:

host='abcxyz.redshift.amazonaws.com',
user='def',
port=5439,
password='123456',
dbname='ijk'

我在python代码中调用文件内容,如下所示:

import psycopg2
with open ('filepath\test.txt', 'r') as myfile:
    data = myfile.read()
conn = psycopg2.connect(data)
cur = conn.cursor()

但是,它给出了以下错误:

psycopg2.ProgrammingError:无效的dsn:连接中“数据”后缺少“ =“  信息字符串

任何人都可以让我知道我到底要去哪里了吗

我试图将文件内容放在引号中,但这也不起作用。

3 个答案:

答案 0 :(得分:0)

我能够通过创建如下文件来做到这一点:

abcxyz.redshift.amazonaws.com
def
5439
123456
ijk

,然后将其另存为test.txt 然后创建一个空列表,并将文件的每一行附加到列表中。然后将psycopg2用作:

conn = psycopg2.connect(host = cred_detail[0][0],
                        user = cred_detail[1][0],
                        port = cred_detail[2][0],
                        password = cred_detail[3][0],
                        dbname = cred_detail[4][0])
cur = conn.cursor()

这不是存储和读取凭据的好方法,但是到目前为止,这已经解决了我的目的。请提供通过Python连接到AWS Redshift时隐藏/隐藏凭证的任何好方法。

答案 1 :(得分:0)

您的配置文件应具有以下内容,并且可以正常工作。请试试。 我同意您的观点,您的解决方案不好,因此请在此处回答,以便对其他人有用。

host=yourhost.redshift.amazonaws.com
user=redshift-user
port=5439
password=redshift-password
dbname=redshift-database

关于您的自我回答问题,

  

请提出在通过Python连接到AWS Redshift时隐藏/隐藏凭证的任何好方法。

可能有很多方法可以保护配置文件,并且每种方法都有其优点/缺点。我建议我使用一种简单的方法(在Unix / Linux环境中),将属性文件设置为特定用户,然后仅保留对用户的读/写访问权限。

答案 2 :(得分:0)

您可以遵循来自postgresql的本机〜/ .pgpass支持。有关详情,请参见https://www.postgresql.org/docs/9.1/libpq-pgpass.html

〜/ .pgpass文件示例:

## hostname:port:database:username:password
## non-admin user
db.example.com:5432:db1:foo:apple
## admin user
db.example.com:5432:db1:postgres:pear

我已经通过jupyter实验室建立了数据库,并将psycopg2用作postgres驱动程序。我使用以下字符串,postgres从〜/ .pgpass文件中为用户选择适当的凭据: foo 和数据库 db1 。我没有尝试过psycopg2.connect命令,但它应该与〜/ .pgpass文件一起使用。

postgresql://foo@db.example.com/db1

如果需要SSL,请使用以下内容:

postgresql://foo@db.example.com/db1?sslmode=require