您的位置:

高效连接MySQL数据库的Python模块——pymysql

MySQL是当前使用最为广泛的开源关系型数据库管理系统,而Python是一种非常流行的编程语言。因此,许多开发者需要使用Python连接MySQL数据库进行数据处理、数据挖掘等操作。pymysql模块是Python3.x版本提供的连接MySQL数据库的模块,它提供了简单、高效、稳定的连接方式。

一、安装pymysql模块

在使用pymysql之前,需要先安装它。使用pip命令可以方便地安装pymysql:

pip install pymysql

安装好之后就可以在Python中使用pymysql了。需要提醒的是,pymysql只支持Python3.x版本,不支持Python2.x版本。

二、创建数据库连接

使用pymysql连接MySQL的第一步就是创建数据库连接。需要提供MySQL的主机地址、端口号、用户名、密码等信息,代码如下:

import pymysql

# 打开数据库连接
db = pymysql.connect(host='localhost', port=3306, user='root', password='password', db='test', charset='utf8mb4')

# 关闭数据库连接
db.close()

其中,host参数表示主机地址,port参数表示端口号,user参数表示用户名,password参数表示密码,db参数表示数据库名称,charset参数表示字符集。

三、执行SQL语句

连接上数据库之后,就可以执行SQL语句进行数据操作了。pymysql提供了executemany()、execute()、select()等方法执行SQL语句。

四、executemany()方法

executemany()方法可以执行一次提交多个SQL语句,它接收两个参数,第一个参数是SQL语句的模板,第二个参数是一个元组或者列表,包含了多个SQL语句的参数,代码如下:

import pymysql

# 打开数据库连接
db = pymysql.connect(host='localhost', port=3306, user='root', password='password', db='test', charset='utf8mb4')

# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()

# 定义要执行的 SQL 语句
sql = "INSERT INTO STUDENTS(name, age, gender) VALUES (%s, %s, %s)"

# 定义要插入的数据列表
data = [('tom', 20, 'male'), ('jerry', 18, 'female'), ('john', 22, 'male')]

try:
    # 执行 SQL 语句
    cursor.executemany(sql, data)

    # 提交到数据库执行
    db.commit()
    
    print('数据插入成功')
except:
    # 如果发生错误则回滚
    db.rollback()
    
    print('数据插入失败')

# 关闭游标和数据库连接
cursor.close()
db.close()

在上面的代码中,首先创建了一个包含三个元组的列表,每个元组表示一个学生的姓名、年龄、性别。然后,执行executemany()方法插入了三条学生记录。如果执行成功,则输出“数据插入成功”,否则输出“数据插入失败”,同时会回滚之前的操作,不对数据库进行任何修改。

五、execute()方法

execute()方法用于执行单个SQL语句,它接收一个参数,即要执行的SQL语句。代码如下:

import pymysql

# 打开数据库连接
db = pymysql.connect(host='localhost', port=3306, user='root', password='password', db='test', charset='utf8mb4')

# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()

# 定义要执行的 SQL 语句
sql = "SELECT * FROM STUDENTS"

try:
    # 执行 SQL 语句
    cursor.execute(sql)

    # 获取所有记录列表
    results = cursor.fetchall()
    for row in results:
        print(row)
except:
    print('无法获取数据')

# 关闭游标和数据库连接
cursor.close()
db.close()

在上面的代码中,首先通过execute()方法执行了一条查询语句,然后使用fetchall()方法获取所有记录的结果集,并输出每一条记录的信息。

六、调用存储过程

在MySQL中,存储过程是一组预编译的SQL语句,可以接收输入参数并返回多个输出参数。当需要在Python中调用MySQL中的存储过程时,可以使用pymysql模块提供的callproc()方法。代码如下:

import pymysql

# 打开数据库连接
db = pymysql.connect(host='localhost', port=3306, user='root', password='password', db='test', charset='utf8mb4')

# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()

# 调用存储过程
sql = "CALL test_proc(%s, %s, @sum)"
data = (10, 20)
cursor.callproc(sql, data)

# 获取输出参数
cursor.execute("SELECT @sum")
result = cursor.fetchone()
print(result[0])

# 关闭游标和数据库连接
cursor.close()
db.close()

在上面的代码中,调用了一个名为test_proc的存储过程,该存储过程接受两个输入参数,分别是10和20。存储过程中计算了两个参数的和,并将结果存储在变量@sum中。在调用完存储过程后,执行了一条SELECT语句获取@sum的值,并输出了该值。

七、异常处理

在使用pymysql时,由于网络问题、MySQL服务器问题等原因,可能会出现一些异常。因此,建议在代码中加入异常处理机制,保证程序的健壮性。下面是一个简单的异常处理示例:

import pymysql

try:
    # 打开数据库连接
    db = pymysql.connect(host='localhost', port=3306, user='root', password='password', db='test', charset='utf8mb4')

    # 使用 cursor() 方法创建一个游标对象 cursor
    cursor = db.cursor()

    # 定义要执行的 SQL 语句
    sql = "SELECT * FROM STUDENTS"

    # 执行 SQL 语句
    cursor.execute(sql)

    # 获取所有记录列表
    results = cursor.fetchall()
    for row in results:
        print(row)

    # 关闭游标和数据库连接
    cursor.close()
    db.close()
except Exception as e:
    print("发生异常:", e)

在上面的代码中,使用try...except结构来捕捉异常。如果在try块中执行出现异常,就会跳转到except块中执行相应的语句。

总结

pymysql是Python中连接MySQL数据库的一个重要模块,它提供了简单、高效、稳定的连接方式。本文介绍了pymysql模块的基本使用方法,包括安装模块、创建数据库连接、执行SQL语句、调用存储过程和异常处理等。在实际开发过程中,需要根据具体的需求进行使用。