
# 开发步骤
#### 获取驱动包
下载[表1]中的驱动包和驱动包校验包。
 表1驱动包下载列表 
| 版本       | 下载地址                                                                                                                                                                                                                                                                                                                                                       |
|:---|:---|
| V2.0-3.x | [驱动包](https://dbs-download.obs.cn-north-1.myhuaweicloud.com/GaussDB/1716950374370/GaussDB_driver.zip) [驱动包校验包](https://dbs-download.obs.cn-north-1.myhuaweicloud.com/GaussDB/1716950374370/GaussDB_driver.zip.sha256) |
   
为了防止软件包在传递过程或存储期间被恶意篡改，下载软件包时需下载对应的校验包对软件包进行校验，校验方法如下：
- Linux操作系统软件包完整性校验：
  1. 上传软件包和软件包校验包到虚拟机的同一目录下。
  
  2. 执行如下命令，校验软件包完整性。 **cat** *GaussDB_driver.zip.sha256* **\| sha256sum --check**
     如果回显OK，则校验通过。
     ```
     GaussDB_driver.zip: OK
     ```
     
   

- Windows操作系统软件包完整性校验：
  1. 使用快捷键"Win+R"打开"运行"窗口。 在"打开"栏，输入"cmd"，按"Enter"回车，打开命令行页面。
  
  2. 执行以下命令，获取驱动包的Hash值。
     certutil -hashfile *{* *驱动包本地目录* *}* \\*{驱动包名}* sha256
     - {*驱动包本地目录*}：请根据实际下载目录进行替换。例如：C:\\Users
     
     - {*驱动包*名}：请根据实际下载的驱动包名进行替换。例如：GaussDB_driver.zip
     
     
     示例：certutil -hashfile C:\\Users\\GaussDB_driver.zip sha256
     
  
  3. 将[2]获取到的Hash值和[表1]中获取到的驱动包校验包的Hash值进行比较。
     - 若一致则通过校验。
     
     - 若不一致，请重新下载驱动包，重复[1]\~[3]进行校验。
      
   
 
#### 连接数据库
1. 准备相关驱动和依赖库。可以从驱动包中获取，包名为GaussDB-Kernel_数据库版本号_操作系统信息_64bit_Python.tar.gz。 
   解压后有两个文件夹：
   - psycopg2：psycopg2库文件。
   
   - lib：lib库文件。
   
   
   
   

2. 加载驱动。 
   - 在使用驱动之前，需要做如下操作：
     1. 先解压版本对应驱动包。
        ```
        tar zxvf xxxx-Python.tar.gz
        ```
        
     
     2. 使用root用户将psycopg2复制到python安装目录下的site-packages文件夹下。
        ```
        su root
        cp psycopg2 $(python3 -c 'import site; print(site.getsitepackages()[0])') -r
        ```
        
     
     3. 修改psycopg2目录权限为755。
        ```
        chmod 755 $(python3 -c 'import site; print(site.getsitepackages()[0])')/psycopg2 -R
        ```
        
     
     4. 将psycopg2目录添加到环境变量$PYTHONPATH，并使之生效。
        ```
        export PYTHONPATH=$(python3 -c 'import site; print(site.getsitepackages()[0])'):$PYTHONPATH
        ```
        
     
     5. 对于非数据库用户，需要将解压后的lib目录，配置在LD_LIBRARY_PATH中。
        ```
        export LD_LIBRARY_PATH=path/to/lib:$LD_LIBRARY_PATH
        ```
        
      
   
   - 在创建数据库连接之前，需要先加载如下数据库驱动程序：
     ```
     import  psycopg2
     ```
     
   
   
   
   
3. 连接数据库。 
   非SSL方式连接数据库：
   1. 使用psycopg2.connect函数获得connection对象。
   
   2. 使用connection对象创建cursor对象。
   
   
   SSL方式连接数据库：
   用户通过psycopy2连接GaussDB服务器时，可以通过开启SSL加密客户端和服务器之间的通讯。在使用SSL时，默认用户已经获取了服务端和客户端所需要的证书和私钥文件，关于证书等文件的获取请参见Openssl相关文档和命令。
   1. 使用\*.ini文件（python的configparser包可以解析这种类型的配置文件）保存数据库连接的配置信息。
   
   2. 在连接选项中添加SSL连接相关参数：sslmode、sslcert、sslkey、sslrootcert。
      1. sslmode：可选项见[表2]。
      
      2. sslcert：客户端证书路径。
      
      3. sslkey：客户端密钥路径。
      
      4. sslrootcert：根证书路径。
       
   
   3. 使用psycopg2.connect函数获得connection对象。
   
   4. 使用connection对象创建cursor对象。
      ![](https://support.huaweicloud.com/centralized-devg-v3-gaussdb/public_sys-resources/caution_3.0-zh-cn.png)
      使用SSL安全连接数据库，需保证所使用的python解释器为生成动态链接库（.so）文件的方式编译，可通过如下步骤确认python解释器的连接方式。
      1. 在python解释器命令行中输入import ssl，导入SSL。
      
      2. 执行ps ux查询python解释器运行的pid（假设pid为\*\*\*\*\*\*）。
      
      3. 在python解释器命令行中执行pmap -p \*\*\*\*\*\* \| grep ssl，查看返回结果中是否包含libssl.so的相关路径。如果有，则python解释器为动态链接方式编译。
        
   
   
    表2sslmode的可选项及其描述 
   | sslmode     | 是否会启用SSL加密 | 描述                                          |
   |:---|:---|:---|
   | disable     | 否          | 不使用SSL安全连接。                                 |
   | allow       | 可能         | 如果数据库服务器要求使用，则可以使用SSL安全加密连接，但不验证数据库服务器的真实性。 |
   | prefer      | 可能         | 如果数据库支持，那么首选使用SSL连接，但不验证数据库服务器的真实性。         |
   | require     | 是          | 必须使用SSL安全连接，但是仅进行数据加密，而并不验证数据库服务器的真实性。      |
   | verify-ca   | 是          | 必须使用SSL安全连接，并且校验服务端CA有效性。                   |
   | verify-full | 是          | 必须使用SSL安全连接，目前GaussDB暂不支持。                  |
      
   
   
4. 执行SQL语句。 
   1. 构造操作语句，使用%s作为占位符，执行时psycopg2会用参数值智能替换掉占位符。可以添加RETURNING子句，来得到自动生成的字段值。
   
   2. 使用cursor.execute方法来操作一行SQL语句，使用cursor.executemany方法来操作多行SQL语句。
   
   
   
   
5. 处理结果集。 
   1. cursor.fetchone()：这种方法提取的查询结果集的下一行，返回一个序列，没有数据可用时则返回空。
   
   2. cursor.fetchall()：这种方法获取所有查询结果（剩余）行，返回一个列表。空行时则返回空列表。
   
   
   ![](https://support.huaweicloud.com/centralized-devg-v3-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
   对于数据库特有数据类型，如tinyint类型，查询结果中相应字段为字符串形式。
   
   
6. 关闭连接。 
   在使用数据库连接完成相应的数据操作后，需要关闭数据库连接。关闭数据库连接可以直接调用其close方法，如connection.close()。
   ![](https://support.huaweicloud.com/centralized-devg-v3-gaussdb/public_sys-resources/caution_3.0-zh-cn.png)
   此方法关闭数据库连接，并不自动调用commit()。如果只是关闭数据库连接而不调用commit()方法，那么所有更改将会丢失。
   
   
 
