boto3.client和pymysql.connect之间的区别



我是使用AWS RDS mysql的新手,现在我在连接这个数据库时遇到了问题

在这里,我有两种方法可以连接到我的AWS RDS mysql,一种是使用"boto3"包,另一种是"pymysql"包。

对于boto3,需要四个参数,它们是:

1) type='rds', 
2) region,
3) aws_access_key_id
4) aws_secret_access_key

我使用的功能是:

boto3.client(type, region, aws_access_key_id=key_id, aws_secret_access_key=access_key)

对于pymysql,我需要5个参数,它们是:

1) host = "databaseinstancename.cxxxxxxxxxx.ca-central-1.rds.amazonaws.com"
2) port = 3306
3) dbname = "xxx"
4) user = "admin"
5) password = "ssssss"

我使用的方法是:

pymysql.connect(host, user=user, port=port, passwd=password, db=dbname)

他们都可以成功地从我的pycharm连接到数据库。

我的问题是

1( 第一种方法(使用boto3(和第二种方法(用pymysql(有什么区别?肯定有什么不同,因为我提供了两种不同类型的信息来连接。

2( 当我在AWS sagemaker中使用jupyter笔记本编辑python3代码试图连接到数据库时,我发现只有第一种方法(使用boto3(可以工作,第二种方法(利用pymysql(无法成功连接,并出现一个错误,说"超时"。当一个方法可以访问数据库,但另一个方法失败时,为什么会发生这种情况?

1(第一种方法(使用boto3(和第二种方法(用pymysql(有什么区别?肯定有什么不同,因为我提供了两种不同类型的信息来连接。

  • boto3用于管理RDS服务中的数据库实例。您可以使用,例如,创建带有读取副本的mysql数据库实例,为数据库实例设置安全组,启用公共访问,等等。

  • pymysql用于实际连接到您的mysql数据库,向其中添加数据,从中选择数据等。

2(当我使用AWS sagemaker中的jupyter笔记本编辑python3代码以尝试连接到数据库时,我发现只有第一种方法(使用boto3(可以工作,第二种方法(用pymysql(无法成功连接,并出现一个错误,说"超时"。当一个方法可以访问数据库,但另一个方法失败时,为什么会发生这种情况?

pymysql超时,原因可能是您尚未为数据库数据实例配置安全组和/或未启用公共访问。

boto3特别是一个AWS库。它将使用您的AWS访问凭据和AWS API来查找有关您提供的参数的信息。

在后台,它可以很好地使用更标准的库,如pymysqlsqlalchemy或其他库来连接到某个RDS实例。(虽然,我看到你没有在一个区域中指定任何RDS实例,所以很难知道你是否真的连接到了任何东西,而不是简单地创建一个BotoClient实例(

超时可能只是由于您提供了错误的凭据,或者网络未配置为在这些环境之间连接。


换句话说,不同之处在于pymsql适用于任何MySQL数据库

最新更新