1. Pymysql简介
Pymysql是一个Python接口到MySQL数据库的模块,可以让我们方便地在Python程序中访问和操作MySQL数据库。它是在CPython上实现的,使用纯Python编写,并且支持MySQL数据库的所有功能。Pymysql提供了一系列的API,可以用来连接数据库、执行SQL语句、获取查询结果等。
2. 数据库连接
在使用Pymysql之前,我们需要先建立与MySQL数据库的连接。连接数据库需要指定数据库的主机地址、用户名、密码以及要连接的数据库名称。下面是一个连接数据库并打开游标(Cursor)的示例代码:
import pymysql
# 建立数据库连接
db = pymysql.connect(host='localhost', user='root', password='123456', database='test')
# 创建一个游标对象
cursor = db.cursor()
在以上代码中,我们使用pymysql库提供的connect()方法建立与MySQL数据库的连接,指定了数据库的主机地址(host)、用户名(user)、密码(password)和数据库名称(database)。创建完连接后,我们使用db.cursor()方法创建一个游标对象,以便后续执行SQL语句。
3. 数据插入
在Pymysql中,可以使用execute()方法执行SQL语句,包括插入、修改、删除等操作。下面是一个往表中插入数据的示例代码:
# SQL插入语句
sql = "INSERT INTO students(name, age, grade) VALUES (%s,%s,%s)"
# 执行SQL语句
cursor.execute(sql, ('Alice', 18, 'A'))
在以上代码中,我们定义了一个SQL插入语句,通过execute()方法执行该语句。execute()方法的第一个参数为SQL语句,第二个参数为SQL语句中的参数,可以使用%s作为占位符,在execute()方法中使用一个元组传入实际的参数值。
4. 提交事务
在Pymysql中,我们可以使用commit()方法提交事务,将之前执行的SQL语句生效。
# 提交事务
db.commit()
在执行完一系列SQL操作后,需要调用commit()方法提交事务,将之前的操作生效。如果不调用commit()方法,之前的操作将不会被持久化,也就是数据库中不会真正保存这些数据。
5. 关闭连接
当我们不再需要与数据库保持连接时,可以使用close()方法关闭连接,释放资源。
# 关闭连接
db.close()
在以上代码中,我们使用close()方法关闭与数据库的连接。
6. 完整示例
下面是一个完整的使用Pymysql往表中插入数据的示例
import pymysql
def insert_data():
# 建立数据库连接
db = pymysql.connect(host='localhost', user='root', password='123456', database='test')
# 创建一个游标对象
cursor = db.cursor()
try:
# SQL插入语句
sql = "INSERT INTO students(name, age, grade) VALUES (%s,%s,%s)"
# 执行SQL语句
cursor.execute(sql, ('Alice', 18, 'A'))
# 提交事务
db.commit()
print("数据插入成功!")
except Exception as e:
# 出现异常,回滚事务
db.rollback()
print("数据插入失败!", str(e))
# 关闭连接
db.close()
insert_data()
在以上示例中,我们定义了一个insert_data()函数,用于插入数据。在函数中,我们先建立与数据库的连接,然后使用execute()方法执行SQL插入语句,最后使用commit()方法提交事务。如果插入数据过程出现异常,我们使用rollback()方法回滚事务,保证数据一致性。最后,我们关闭与数据库的连接。
7. 总结
Pymysql是一个方便易用的Python模块,可以帮助我们快速地与MySQL数据库进行交互。本文介绍了Pymysql的基本使用,包括连接数据库、执行SQL语句和关闭连接等操作。通过学习和理解Pymysql的使用方法,我们可以更加灵活地操作数据库,实现对表中数据的插入、修改、删除等操作。
注意事项:
在使用Pymysql操作数据库时,需要保证数据库的安全性:
使用合适的用户名和密码进行连接,不要使用默认的或者弱密码。
在执行SQL语句前,对用户输入的数据进行合法性检查,防止SQL注入攻击。
及时关闭数据库连接,释放资源,避免连接池耗尽。