需要 SSL 时将 Python/pandas 连接到 Redshift

Posted

技术标签:

【中文标题】需要 SSL 时将 Python/pandas 连接到 Redshift【英文标题】:Connecting Python/pandas to Redshift when SSL is required 【发布时间】:2015-09-10 21:47:41 【问题描述】:

我的公司最近更改了我们的 Redshift 集群,现在他们需要 SSL 连接。过去,我通过这里详述的方法将 Python/pandas 连接到 Redshift:http://measureallthethin.gs/blog/connect-python-and-pandas-to-redshift/

从 SQLAlchemy 文档看来,我需要做的只是将 connect_args='sslmode':'require' 添加到 create_engine() 调用中,正如该线程指出的那样:How do I connect to Postgresql using SSL from SqlAchemy+pg8000?

但是,我现在收到此错误:

OperationalError: (psycopg2.OperationalError) sslmode 值“require”在未编译 SSL 支持时无效

我将 Anaconda 发行版用于许多软件包,发现我需要按照以下说明更新我的 psycopg2 软件包:https://groups.google.com/a/continuum.io/d/msg/conda/Fqv93VKQXAc/mHqfNK8xZWsJ

但是,即使在更新 psycopg2 之后,我仍然会遇到同样的错误,并且在这一点上不知道如何进一步调试。我想弄清楚这一点,这样我就可以将我们的 Redshift 数据直接导入 pandas。

【问题讨论】:

尝试使用“verify-full”或“verify-ca”。当我之前尝试使用任何其他 sslmode 进行连接时,我收到消息:“[Amazon](500155) 属性 sslmode 的值无效。有效值为:verify-full, verify-ca。” 【参考方案1】:

AWS 为 Python 开发了一个 Amazon Redshift 连接器 (here is the GitHub repo),可在此过程中提供帮助。

为了安装它可以从源代码安装

git clone https://github.com/aws/amazon-redshift-python-driver.git
cd redshift_connector
pip install .

或者从二进制使用PyPi

pip install redshift_connector

或Conda

conda install -c conda-forge redshift_connector

这是一个例子

import redshift_connector

# Connects to Redshift cluster using AWS credentials
conn = redshift_connector.connect(
    host='examplecluster.abc123xyz789.us-west-1.redshift.amazonaws.com',
    database='dev',
    user='awsuser',
    password='my_password'
 )

cursor: redshift_connector.Cursor = conn.cursor()
cursor.execute("create Temp table book(bookname varchar,author varchar)")
cursor.executemany("insert into book (bookname, author) values (%s, %s)",
                    [
                        ('One Hundred Years of Solitude', 'Gabriel García Márquez'),
                        ('A Brief History of Time', 'Stephen Hawking')
                    ]
                  )
cursor.execute("select * from book")

result: tuple = cursor.fetchall()
print(result)
>> (['One Hundred Years of Solitude', 'Gabriel García Márquez'], ['A Brief History of Time', 'Stephen Hawking'])

请注意,可以通过的Connection Parameters 之一是 SSL(如果启用了 SSL)。默认值为TRUE

【讨论】:

对于任何考虑使用 aws lambda 的人... :thumbs-down: redshift_connector 不适用于我的 lambda 用途。我捆绑了它,但 lambda 想要scramp,然后是asn1crypto,然后我停了下来。知道如何为 aws lambda 执行此操作吗? this 对你有帮助吗?报废问题是否类似于this?

以上是关于需要 SSL 时将 Python/pandas 连接到 Redshift的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 中使用 SSL 连接到 MySQL

如何通过 SSL 连接到 Amazon RDS?

Python Pandas:排序和分组,然后将第二列的两个连续行求和以获得第三列的特定值

使用 R 通过 SSL 连接到 Postgres

C# 客户端通过 SSL 连接到 Java 服务器

PHP PDO 使用 SSL 连接到 MS SQLServer Express