---
title: "PyMySQL 连接 OB Cloud 云数据库示例程序 - OB Cloud 云数据库 master | OceanBase 文档中心"
description: PyMySQL 连接 OB Cloud 云数据库示例程序 本文将介绍如何使用 PyMySQL 库和 OB Cloud 云数据库构建一个应用程序，实现基本的数据库操作，包括创建表、插入数据、查询数据和删除表等。 点击下载 python-pymysql 示例工程 PyMySQL 连接 OceanBase 数据库示例程序（…
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*qbZXRo_94ZEAAAAAAAAAAAAADiGDAQ/original) OB Cloud 云数据库

# PyMySQL 连接 OB Cloud 云数据库示例程序

更新时间：2026-05-14 14:28:03

本文将介绍如何使用 PyMySQL 库和 OB Cloud 云数据库构建一个应用程序，实现基本的数据库操作，包括创建表、插入数据、查询数据和删除表等。

 [![](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/download.png) 点击下载 python-pymysql 示例工程](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/observer-enterprise/V4.2.0/3.develop/demo/python/python-pymysql.zip) [![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*DFPmToHK6hgAAAAAAAAAAAAADiGDAQ/original) PyMySQL 连接 OceanBase 数据库示例程序（MySQL 模式）](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/video-center/video/video/03%20python-pymysql.mp4)  

## 前提条件

- 您已安装 Python 3.x 和 pip。
 - 您已注册 OB Cloud 云数据库账号,并创建集群实例和 MySQL 兼容模式租户。详情请参见 [创建集群实例](https://www.oceanbase.com/docs/common-oceanbase-cloud-10000000001780086) 和 [创建租户](https://www.oceanbase.com/docs/common-oceanbase-cloud-10000000001780107)。

## 操作步骤

1. 检查 `Python` 和 `pip` 的版本。
 2. 安装 PyMySQL 库。
 3. 获取 OB Cloud 云数据库连接信息。
 4. 修改 `config.py` 文件中的数据库连接信息。
 5. 运行 `main.py` 文件。

### 步骤一：检查 Python 和 pip 的版本

打开命令提示符或 PowerShell 终端，运行 `python --version` 和 `pip --version` 命令，确保 Python 和 pip 正常安装。

**示例如下：**

```shell
PS C:\Windows\system32> python --version
Python 3.7.0
PS C:\Windows\system32> pip --version
pip 22.3.1 from d:\python\python37\lib\site-packages\pip (python 3.7)

```

### 步骤二：安装 PyMySQL 库

PyMySQL 是一个纯 Python 实现的 MySQL 客户端库，安装简单，无需编译，跨平台兼容性好。它提供了与 MySQL 数据库交互的接口，支持 Python 3.x 版本。

打开命令提示符或 PowerShell 终端，运行以下命令，安装 PyMySQL 库。

1. 运行以下命令，进入到代码的 `python-pymysql` 目录。

   **示例如下：**

   ```shell
   cd python-pymysql

   ```
 2. 运行以下命令，安装项目所需的 Python 库。

   **示例如下：**

   ```shell
   pip install -r requirements.txt

   ```

#### 说明

您也可以直接打开命令提示符或 PowerShell 终端运行 `pip install pymysql` 命令安装 PyMySQL 库。PyMySQL 是一个纯 Python 实现的库，安装简单，无需编译，适合开发环境和测试环境使用。

### 步骤三：获取 OB Cloud 云数据库连接信息

1. 登录 [OB Cloud 云数据库控制台](https://console-cn.oceanbase.com/)。在实例列表页面，展开目标实例的信息，在目标租户下，选择 **连接** > **获取连接串**。

   更多详细操作，请参见 [获取连接串](https://www.oceanbase.com/docs/common-oceanbase-cloud-10000000001781435)。
 2. 根据已创建的 OB Cloud 云数据库填写下面 URL 的对应信息。

   ```shell
   obclient -h$host -P$port -u$user_name -p$password -D$database_name

   ```

   **参数说明：**

      - `$host`：提供 OB Cloud 云数据库连接地址，例如 `t********.********.oceanbase.cloud`。
      - `$port`：提供 OB Cloud 云数据库连接端口，默认为 3306。
      - `$database_name`：需要访问的数据库名称。

       #### 注意

       连接租户的用户需要拥有该数据库的 `CREATE`、`INSERT`、`DROP` 和 `SELECT` 权限。更多有关账号权限的信息，请参见 [创建并管理账号](https://www.oceanbase.com/docs/common-oceanbase-cloud-1000000001018091)。
      - `$user_name`：提供访问数据库的账号。
      - `$password`：提供账户密码。

   **示例如下：**

   ```shell
   obclient -h t********.********.oceanbase.cloud -P3306 -u mysql001 -p****** -Dtest

   ```

### 步骤四：修改 config.py 文件中的数据库连接信息

根据 **步骤三：获取 OB Cloud 云数据库连接信息** 中的信息修改项目文件 `python-pymysql/config.py` 中的数据库连接信息。

1. 进入 `python-pymysql` 项目文件夹。
 2. 修改 `config.py` 文件中的数据库连接信息。

      - 在 Windows 环境下，使用文本编辑器打开 `config.py` 文件，修改文件中的数据库连接信息，确保与实际情况相符。
      - 在 Linux 环境下，可以使用 `vi config.py` 或者 `vim config.py` 命令编辑 `config.py` 文件，修改文件中的数据库连接信息，确保与实际情况相符。

   **`config.py` 文件中的数据库连接信息示例如下：**

   ```python
   DB_CONFIG = {
       'host': 't5******.********.oceanbase.cloud',
       'port': 3306,
       'user': 'mysql001',
       'password': '******',
       'database': 'test',
       'charset': 'utf8mb4'
   }

   ```

### 步骤五：运行 main.py 文件

打开命令提示符或 PowerShell 终端，运行 `main.py` 文件，查询数据并输出结果。

1. 进入到 `python-pymysql` 项目目录下。

   **示例如下：**

   ```shell
   cd D:\demo\demo\python-pymysql

   ```
 2. 运行 `main.py` 文件。

   **示例如下：**

   ```shell
   python main.py

   ```

   返回结果如下：

   ```shell
   2023-11-10 16:56:48,021 - INFO - Start executing the script
   2023-11-10 16:56:48,021 - INFO - Start creating the table
   2023-11-10 16:56:48,281 - INFO - Table creation successful
   2023-11-10 16:56:48,281 - INFO - Start inserting data
   2023-11-10 16:56:48,540 - INFO - Data insertion successful
   (1, 'John', 20)
   (2, 'Lucy', 25)
   (3, 'Tom', 30)
   2023-11-10 16:56:48,737 - INFO - Start dropping the table
   2023-11-10 16:56:48,999 - INFO - Table dropped successfully
   2023-11-10 16:56:48,999 - INFO - Script execution completed

   ```

## 项目代码介绍

点击 [python-pymysql](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/observer-enterprise/V4.2.0/3.develop/demo/python/python-pymysql.zip) 下载项目代码，是一个名称为 `python-pymysql.zip` 的压缩包。

解压后，得到一个名为 `python-pymysql` 的文件夹。目录结构如下所示：

```shell
python-pymysql
├── config.py
├── test_sql.py
├── main.py
└── requirements.txt

```

**文件说明：**

- `config.py`：用于存储数据库连接信息。
 - `test_sql.py`：用于存储 SQL 语句。
 - `main.py`：主程序入口，用于执行数据库的基本操作，包括创建表、插入数据、查询数据和删除表。
 - `requirements.txt`：用于存储项目所需要的 Python 包及其版本信息。

  #### 说明

  本文获取的代码中只列出了 PyMySQL 库的版本要求，可以通过 `sudo pip install -r requirements.txt` 命令安装，执行以上命令后，会自动安装所需的库。

### config.py 代码介绍

本文获取的 `config.py` 文件中的代码定义了数据库连接信息。数据库连接信息主要包括以下几个部分：

指定连接数据库的 IP 地址、端口号、用户名、密码、数据库名称和字符集。

**代码如下：**

```python
DB_CONFIG = {
    'host': '$host',
    'port': $port,
    'user': '$user_name',
    'password': '$password',
    'database': '$database_name',
    'charset': 'utf8mb4'
}

```

**参数解释：**

- `$host`：OB Cloud 云数据库连接地址。
 - `$port`：OB Cloud 云数据库连接端口。
 - `$user_name`：访问数据库的账号。
 - `$password`：账号密码。
 - `$database_name`：要连接的数据库名。
 - `charset`：连接数据库时使用的字符集。

#### 注意

这里的参数值是根据具体环境和数据库设置而定的，需要根据实际情况进行修改。

### test_sql.py 代码介绍

本文获取的 `test_sql.py` 文件中的代码定义了数据库操作的 SQL 语句，包括创建表、插入数据、查询数据和删除表，这些 SQL 语句可以通过 PyMySQL 连接数据库后执行，以实现相应的功能。

该文件中的代码主要包括以下几个部分：

1. 创建表的 SQL 语句。

   定义创建表 `test_pymysql` 的 SQL 语句，在表中定义了三个字段，分别为 `id`、`name` 和 `age`，其中 `id` 是自增长的主键。

   **代码如下：**

   ```python
   CREATE_TABLE_SQL = '''
   CREATE TABLE test_pymysql (
   id INT(11) NOT NULL AUTO_INCREMENT,
   name VARCHAR(128) NOT NULL,
   age INT(11) NOT NULL,
   PRIMARY KEY (id)
   )
   '''

   ```
 2. 插入数据的 SQL 语句。

   定义一个向 `test_pymysql` 表插入数据的 SQL 语句，插入的数据将包含三条，每条数据包含两个字段：`name` 和 `age`。每个字段的值将在执行 SQL 语句时，通过占位符 `%s` 的形式被传入。

   **代码如下：**

   ```python
   INSERT_DATA_SQL = '''
   INSERT INTO test_pymysql (name, age) VALUES
   (%s, %s),
   (%s, %s),
   (%s, %s)
   '''

   ```
 3. 查询数据的 SQL 语句。

   定义查询数据的 SQL 语句，从 `test_pymysql` 表中查询所有数据。

   **代码如下：**

   ```python
   SELECT_DATA_SQL = '''
   SELECT * FROM test_pymysql
   '''

   ```
 4. 删除表的 SQL 语句。

   定义删除表的 SQL 语句，将 `test_pymysql` 表删除。

   **代码如下：**

   ```python
   DROP_TABLE_SQL = '''
   DROP TABLE test_pymysql
   '''

   ```

### main.py 代码介绍

本文获取的 `main.py` 文件中的代码通过调用 `pymysql` 模块，连接 MySQL 数据库，以及调用 `logging` 模块，输出日志信息，实现创建表、插入数据、查询数据和删除表的操作。

`main.py` 文件中的代码主要包括以下几个部分：

1. 导入所需的模块。

      1. 导入 `logging` 模块。
      2. 导入 `pymysql` 模块。
      3. 导入 `config.py` 模块，其中定义了数据库连接信息。
      4. 导入 `test_sql.py` 模块，其中定义了数据库操作的 SQL 语句。

   **代码如下：**

   ```python
   import logging
   import pymysql
   from config import DB_CONFIG
   from test_sql import CREATE_TABLE_SQL, INSERT_DATA_SQL, SELECT_DATA_SQL, DROP_TABLE_SQL

   ```
 2. 设置日志记录的级别和格式，并输出一条 INFO 级别的日志信息，表示开始执行脚本。

   **代码如下：**

   ```python
   logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
   logging.info('Start executing the script')

   ```
 3. 定义创建表的函数。

   定义一个名为 `create_table()` 的函数，输出一条 INFO 级别的日志信息，表示开始创建表。使用 `with` 语句管理数据库连接和游标对象的生命周期，保证了数据库连接和游标对象的安全关闭，避免了内存泄漏等问题。执行创建表的 SQL 语句，提交事务并输出日志信息，或回滚事务并输出错误日志信息。

   **代码如下：**

   ```python
   def create_table():
       logging.info('Start creating the table')
       with pymysql.connect(**DB_CONFIG) as conn:
           with conn.cursor() as cursor:
               try:
                   cursor.execute(CREATE_TABLE_SQL)
                   conn.commit()
                   logging.info('Table creation successful')
               except Exception as e:
                   conn.rollback()
                   logging.error('Table creation failed, Reason：%s' % e)

   ```
 4. 定义插入数据的函数。

   定义一个名为 `insert_data()` 的函数，输出一条 INFO 级别的日志信息，表示开始插入数据。使用 `with` 语句管理数据库连接和游标对象的生命周期，保证了数据库连接和游标对象的安全关闭，避免了内存泄漏等问题。执行插入数据的 SQL 语句，提交事务并输出日志信息，或回滚事务并输出错误日志信息。

   **代码如下：**

   ```python
   def insert_data():
       logging.info('Start inserting data')
       with pymysql.connect(**DB_CONFIG) as conn:
           with conn.cursor() as cursor:
               try:
                   data = [('John', 20), ('Lucy', 25), ('Tom', 30)]
                   flattened_data = [d for item in data for d in item]
                   cursor.executemany(INSERT_DATA_SQL, [flattened_data])
                   conn.commit()
                   logging.info('Data insertion successful')
               except Exception as e:
                   conn.rollback()
                   logging.error('Data insertion failed, Reason：%s' % e)

   ```
 5. 定义查询数据的函数。

   定义一个名为 `select_data()` 的函数，用于从数据库中查询数据。使用 `with` 语句管理数据库连接和游标对象的生命周期，保证了数据库连接和游标对象的安全关闭，避免了内存泄漏等问题。使用 `execute()` 方法执行 `SELECT_DATA_SQL` 定义的 SQL 语句查询数据。使用 `fetchall()` 方法获取查询结果，并通过 `for` 循环逐行输出结果。

   **代码如下：**

   ```python
   def select_data():
       with pymysql.connect(**DB_CONFIG) as conn:
           with conn.cursor() as cursor:
               cursor.execute(SELECT_DATA_SQL)
               result = cursor.fetchall()
               for row in result:
                   print(row)

   ```
 6. 定义删除表的函数。

   定义一个名为 `drop_table()` 函数，该函数使用了预先定义的数据库连接信息（`DB_CONFIG`）和删除表的 SQL 语句（`DROP_TABLE_SQL`）。函数会执行删除表的操作，并打印相应的日志信息表示操作成功或失败。如果删除表操作失败，会打印出错误信息。

   **代码如下：**

   ```python
   def drop_table():
       logging.info('Start dropping the table')
       with pymysql.connect(**DB_CONFIG) as conn:
           with conn.cursor() as cursor:
               try:
                   cursor.execute(DROP_TABLE_SQL)
                   conn.commit()
                   logging.info('Table dropped successfully')
               except Exception as e:
                   conn.rollback()
                   logging.error('Table drop failed, Reason：%s' % e)

   ```
 7. 定义程序的入口点，主要用于执行数据库操作的函数。

   首先判断当前模块是否作为主程序运行，如果是，则执行以下操作：

      1. 调用 `create_table()` 函数，创建数据库表。
      2. 调用 `insert_data()` 函数，向表中插入数据。
      3. 调用 `select_data()` 函数，从表中查询数据。
      4. 调用 `drop_table()` 函数，删除数据库表。

   **代码如下：**

   ```python
   if __name__ == '__main__':
       create_table()
       insert_data()
       select_data()
       drop_table()

   ```
 8. 输出一条 INFO 级别的日志信息，表示脚本执行完成。

   **代码如下：**

   ```python
   logging.info('Script execution completed')

   ```

### 完整的代码展示

    config.py   test_sql.py   main.py

```python
# Database Connection
DB_CONFIG = {
    'host': '$host',
    'port': $port,
    'user': '$user_name',
    'password': '$password',
    'database': '$database_name',
    'charset': 'utf8mb4'
}

```

```python
# Create table
CREATE_TABLE_SQL = '''
CREATE TABLE test_pymysql (
  id INT(11) NOT NULL AUTO_INCREMENT,
  name VARCHAR(128) NOT NULL,
  age INT(11) NOT NULL,
  PRIMARY KEY (id)
  )
'''

# Insert data
INSERT_DATA_SQL = '''
INSERT INTO test_pymysql (name, age) VALUES
(%s, %s),
(%s, %s),
(%s, %s)
'''

# Query data
SELECT_DATA_SQL = '''
SELECT * FROM test_pymysql
'''

# Delete table
DROP_TABLE_SQL = '''
DROP TABLE test_pymysql
'''

```

logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
logging.info('Start executing the script')

# Create table
def create_table():
    logging.info('Start creating the table')
    with pymysql.connect(**DB_CONFIG) as conn:
        with conn.cursor() as cursor:
            try:
                cursor.execute(CREATE_TABLE_SQL)
                conn.commit()
                logging.info('Table creation successful')
            except Exception as e:
                conn.rollback()
                logging.error('Table creation failed, Reason：%s' % e)

# Insert data
def insert_data():
    logging.info('Start inserting data')
    with pymysql.connect(**DB_CONFIG) as conn:
        with conn.cursor() as cursor:
            try:
                data = [('John', 20), ('Lucy', 25), ('Tom', 30)]
                flattened_data = [d for item in data for d in item]
                cursor.executemany(INSERT_DATA_SQL, [flattened_data])
                conn.commit()
                logging.info('Data insertion successful')
            except Exception as e:
                conn.rollback()
                logging.error('Data insertion failed, Reason：%s' % e)

# Query data
def select_data():
    with pymysql.connect(**DB_CONFIG) as conn:
        with conn.cursor() as cursor:
            try:
                cursor.execute(SELECT_DATA_SQL)
                result = cursor.fetchall()
                for row in result:
                    print(row)
            except Exception as e:
                logging.error('Data query failed, Reason：%s' % e)

# Delete table
def drop_table():
    logging.info('Start dropping the table')
    with pymysql.connect(**DB_CONFIG) as conn:
        with conn.cursor() as cursor:
            try:
                cursor.execute(DROP_TABLE_SQL)
                conn.commit()
                logging.info('Table dropped successfully')
            except Exception as e:
                conn.rollback()
                logging.error('Table drop failed, Reason：%s' % e)

if __name__ == '__main__':
    create_table()
    insert_data()
    select_data()
    drop_table()

logging.info('Script execution completed')

```

## 错误处理

在使用 PyMySQL 连接 OB Cloud 云数据库时，可能会遇到各种错误。以下是一些常见的错误及其处理方法：

1. **连接错误**：如果无法连接到数据库，请检查连接参数是否正确，包括主机名、端口、用户名、密码和数据库名。
 2. **权限错误**：如果遇到权限相关的错误，请确保用户拥有足够的权限来执行所需的操作。
 3. **SQL 语法错误**：如果 SQL 语句有语法错误，请检查 SQL 语句的语法是否正确。
 4. **数据类型错误**：如果插入的数据类型与表定义不匹配，请确保插入的数据类型正确。

在代码中，我们使用 `try-except` 语句来捕获和处理这些错误，确保程序在遇到错误时能够优雅地处理，而不是直接崩溃。同时，我们使用 `logging` 模块记录错误信息，方便调试和问题排查。

## 相关文档

- 更多连接 OB Cloud 云数据库的信息，请参见 [连接方式概述](https://www.oceanbase.com/docs/common-oceanbase-cloud-1000000001346097)。

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
