Python Pandas有to_sql和read_sql方法,可以用来与数据库通信。
我正在连接到Postgres数据库。Pandas似乎使用SQL Alchemy和psycopg2来执行通信。
当使用create_engine('mysql+mysqlconnector://user:password@amazon_endpoint:port/database_name',connect_args={'sslmode':'require'}, echo=True)
时,我收到AttributeError: Unsupported argument 'sslmode'
错误。
然后我看到以下帖子:1,2,并修改代码为create_engine('mysql+mysqlconnector://user:password@amazon_endpoint:port/database_name?ssl_ca=/home/user/Downloads/rds-combined-ca-bundle.pem')
。连接现在工作,我能够连接到数据库。这是否意味着连接现在是安全的?我能确认一下吗?
我不相信默认连接是安全的,除非您的Postgres实例已配置为需要安全连接。首先,您的实例需要使用SSL支持构建,然后告诉客户机安全连接就很简单了。来自文档:
PostgreSQL原生支持使用SSL连接来加密客户端/服务器通信,以提高安全性。这需要在客户端和服务器系统上都安装OpenSSL,并且在构建时启用PostgreSQL的支持(参见第15章)。在编译了SSL支持后,PostgreSQL服务器可以通过在PostgreSQL .conf中设置参数SSL为on来启动SSL。服务器将监听同一TCP端口上的普通连接和SSL连接,并与任何连接的客户端协商是否使用SSL。默认情况下,这是客户端的选择;请参阅第19.1节,了解如何将服务器设置为要求对部分或所有连接使用SSL。
当您使用to_sql
或read_sql
时,向它传递一个使用sslmode=require
建立的SQLAlchemy连接。这个问题提供了设置连接的完整代码片段:
db = create_engine(
'postgresql+pg8000://user:pass@hostname/dbname',
connect_args={'sslmode':'require'},
echo=True
).connect()