
# 连接数据库
通过Python连接实例的方式有无需下载SSL证书连接和用户下载SSL证书连接两种，其中使用SSL证书连接通过了加密功能，具有更高的安全性。
DDS新实例默认关闭SSL数据加密，开启SSL请参考[开启SSL](https://support.huaweicloud.com/usermanual-dds/dds_03_0074.html#section1)。
#### 前提条件
1. 连接数据库的弹性云服务器必须和DDS实例之间网络互通，可以使用curl命令连接DDS实例服务端的IP和端口号，测试网络连通性。 **curl** *ip:port*
   返回"It looks like you are trying to access MongoDB over HTTP on the native driver port."，说明网络互通。
   
2. 在弹性云服务器上安装Python以及第三方安装包[pymongo](https://pypi.python.org/pypi/pymongo/2.7#downloads)。推荐使用pymongo2.8版本。
3. 如果开启SSL，需要在界面上下载根证书，并上传到弹性云服务器。
 
#### 连接代码
- SSL开启
  ```
  import ssl
  import os
  from pymongo import MongoClient
  # 认证用的用户名和密码直接写到代码中有很大的安全风险，建议在配置文件或者环境变量中存放(密码应密文存放、使用时解密)，确保安全
  # 本示例以用户名和密码保存在环境变量中为例，运行本示例前请先在本地环境中设置环境变量(环境变量名称请根据自身情况进行设置)EXAMPLE_USERNAME_ENV和EXAMPLE_PASSWORD_ENV
  rwuser = os.getenv('EXAMPLE_USERNAME_ENV')
  password = os.getenv('EXAMPLE_PASSWORD_ENV')
  conn_urls="mongodb://%s:%s@ip:port/{mydb}?authSource=admin"
  connection = MongoClient(conn_urls % (rwuser, password),connectTimeoutMS=5000,ssl=True, ssl_cert_reqs=ssl.CERT_REQUIRED,ssl_match_hostname=False,ssl_ca_certs=${path to certificate authority file})
  dbs = connection.database_names()
  print "connect database success! database names is %s" % dbs
  ```
  
- SSL关闭
  ```
  import ssl
  import os
  from pymongo import MongoClient
  # 认证用的用户名和密码直接写到代码中有很大的安全风险，建议在配置文件或者环境变量中存放(密码应密文存放、使用时解密)，确保安全
  # 本示例以用户名和密码保存在环境变量中为例，运行本示例前请先在本地环境中设置环境变量(环境变量名称请根据自身情况进行设置)EXAMPLE_USERNAME_ENV和EXAMPLE_PASSWORD_ENV
  rwuser = os.getenv('EXAMPLE_USERNAME_ENV')
  password = os.getenv('EXAMPLE_PASSWORD_ENV')
  conn_urls="mongodb://%s:%s@ip:port/{mydb}?authSource=admin"
  connection = MongoClient(conn_urls % (rwuser, password),connectTimeoutMS=5000)
  dbs = connection.database_names()
  print "connect database success! database names is %s" % dbs
  ```
  
 
![](https://support.huaweicloud.com/devg-dds/public_sys-resources/note_3.0-zh-cn.png)
URL中的认证数据库必须为"admin"，即"authSource=admin"。
