
# 通过Python连接TaurusDB实例
通过Python连接实例的方式有无需下载SSL证书连接和用户下载SSL证书连接两种，其中使用SSL证书连接通过了加密功能，具有更高的安全性。TaurusDB新实例默认开启SSL数据加密，SSL连接实现了数据加密功能，但同时会增加网络连接响应时间和CPU消耗，请评估对业务的性能影响，根据需要进行设置，详细内容请参考[设置SSL数据加密](https://support.huaweicloud.com/usermanual-taurusdb/taurusdb_03_0142.html)。
#### 前提条件
用户需要具备以下技能：
- 熟悉计算机基础知识。
- 了解Python编程语言。
- 了解Python基础知识。
 
#### 通过Python连接实例
- [使用SSL证书连接]
  使用SSL证书连接实例，即通过证书校验并连接数据库。
  1. 下载CA证书或捆绑包。 
     1. 在"实例管理"页面，单击实例名称，进入实例概览页面。
     
     2. 单击"SSL"开关右侧的"下载"。
     
     
     
     
  
  2. 通过Python连接TaurusDB数据库，代码中的Python链接格式如下： 
     ```
     conn = pymysql.connect(
                 host=instance_ip,
                 port=instance_port,
                 user=username,
                 password=password,
                 database=database_name,
                 ssl=ssl_config
             )
     ```
     表1参数说明 
     | 参数              | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
     |:---|:---|
     | *instance_ip*   | 请替换为实例的IP地址。 - 如果通过弹性云服务器连接，"instance_ip"是实例的"读写内网地址"。您可以在该实例概览页面的"网络信息"区域查看。  - 如果通过公网连接，"instance_ip"为该实例已绑定的"弹性公网IP"，即读写公网地址。您可以在该实例概览页面的"网络信息"区域查看。  - 如果开启了数据库代理，通过数据库代理连接TaurusDB实例时，此处的IP为数据库代理地址。您可以在数据库代理页面查看代理地址。   |
     | *instance_port* | 请替换为实例的数据库端口，默认为3306。 您可以在该实例概览页面的"网络信息"区域查看。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
     | *database_name* | 请替换为连接实例使用的数据库名。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
     | *ssl_config*    | CA证书名称，该文件需放在执行该命令的路径下。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
        
     代码示例（连接TaurusDB数据库的Python代码）：
     ```
     import pymysql
     import os
     // 配置数据库连接参数
     instance_ip =  '*.*.*.*' //替换为实例的IP地址
     instance_port = 3306
     database_name = 'my_db_test'
     // SSL 配置（使用 CA Bundle 验证服务器证书）
     ssl_config = {
         'ssl': {
             'ca': '/path/to/ca-bundle.pem',  // CA 证书链文件
             'check_hostname': True  // 验证主机名
         }
     }
         conn = None
         try:
             // 认证用的用户名和密码直接写到代码中有很大的安全风险，建议在配置文件或者环境变量中存放(密码应密文存放，使用时解密)，确保安全。
             // 本示例以用户名和密码保存在环境变量中为例，运行本示例前请先在本地环境中设置环境变量(环境变量名称请根据自身情况进行设置)EXAMPLE_USERNAME_ENV和EXAMPLE_PASSWORD_ENV。
             username = os.getenv('EXAMPLE_USERNAME_ENV')
             password = os.getenv('EXAMPLE_PASSWORD_ENV')
             // 建立数据库连接
             conn = pymysql.connect(
                 host=instance_ip ,
                 port=instance_port ,
                 user=username,
                 password=password,
                 database=database_name ,
                 ssl=ssl_config
             )
             print("Database connected(SSL with CA verification)")
             with conn.cursor() as cursor:
                 // 执行查询
                 sql = "SELECT * FROM mytable WHERE columnfoo = 500"
                 cursor.execute(sql)
                 // 获取并打印结果
                 results = cursor.fetchall()
                 for row in results:
                     print(row)
         finally:
             // 关闭数据库连接
             if conn and conn.open:
                 conn.close()
                 print("Database connection closed")
     ```
     
     
   
- [无证书连接]
  ![](https://support.huaweicloud.com/usermanual-taurusdb/public_sys-resources/note_3.0-zh-cn.png)
  该方式不对服务端进行证书校验，用户无需下载SSL证书。
  1. 通过Python连接TaurusDB数据库实例，代码中的Python链接格式如下： 
     ```
     conn = pymysql.connect(
                 host=instance_ip,
                 port=instance_port,
                 user=username,
                 password=password,
                 database=database_name,
                 ssl=ssl_config
             )
     ```
     表2变量说明 
     | 变量              | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
     |:---|:---|
     | *instance_ip*   | 请替换为实例的IP地址。 - 如果通过弹性云服务器连接，"instance_ip"是实例的"读写内网地址"。您可以在该实例概览页面的"网络信息"区域查看。  - 如果通过公网连接，"instance_ip"为该实例已绑定的"弹性公网IP"，即读写公网地址。您可以在该实例概览页面的"网络信息"区域查看。   |
     | *instance_port* | 请替换为实例的数据库端口，默认为3306。 您可以在该实例概览页面的"网络信息"区域查看。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
     | *database_name* | 请替换为连接实例使用的数据库名。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
        
     代码示例（连接TaurusDB数据库的Python代码）：
     ```
     import pymysql
     import os
     // 配置数据库连接参数
     instance_ip= '*.*.*.*' //替换为实例的IP地址
     instance_port= 3306
     database_name= 'my_db_test'
         conn = None
         try:
             // 认证用的用户名和密码直接写到代码中有很大的安全风险，建议在配置文件或者环境变量中存放(密码应密文存放，使用时解密)，确保安全。
             // 本示例以用户名和密码保存在环境变量中为例，运行本示例前请先在本地环境中设置环境变量(环境变量名称请根据自身情况进行设置)EXAMPLE_USERNAME_ENV和EXAMPLE_PASSWORD_ENV。
             
             username = os.getenv('EXAMPLE_USERNAME_ENV')
             password = os.getenv('EXAMPLE_PASSWORD_ENV')
             // 建立数据库连接
             conn = pymysql.connect(
                 host=instance_ip,
                 port=instance_port,
                 user=username,
                 password=password,
                 database=database_name,
             )
             print("Database connected")
             with conn.cursor() as cursor:
                 // 执行查询
                 sql = "SELECT * FROM mytable WHERE columnfoo = 500"
                 cursor.execute(sql)
                 // 获取并打印结果
                 results = cursor.fetchall()
                 for row in results:
                     print(row)
         finally:
             // 关闭数据库连接
             if conn and conn.open:
                 conn.close()
                 print("Database connection closed")
     ```
     
     
   
