我已将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:连接中“数据”后缺少“ =“ 信息字符串
任何人都可以让我知道我到底要去哪里了吗
我试图将文件内容放在引号中,但这也不起作用。
答案 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