一、安装和创建连接
1、pymysql是Python的一个第三方模块,我们需要先使用pip进行安装:
!pip install pymysql
2、安装完成后,我们需要使用pymysql连接MySQL数据库,连接的主要参数包括host、port、user、password、db等,示例代码如下:
import pymysql
# 创建连接
conn = pymysql.connect(host='localhost', port=3306, user='root', password='root', db='test')
3、连接创建成功后,可以使用cursor()方法创建游标对象,用于执行SQL语句:
cursor = conn.cursor()
二、基本操作
1、执行SQL语句
1)查询数据:使用execute()方法执行SQL语句,再使用fetchone()或fetchall()方法获取查询结果。
sql = "SELECT * FROM student"
cursor.execute(sql)
result = cursor.fetchall()
for row in result:
print(row)
2)插入数据:使用execute()方法执行insert语句,再使用commit()方法提交事务。
sql = "INSERT INTO student (name, age) VALUES ('Tom', 20)"
cursor.execute(sql)
conn.commit()
3)更新数据:使用execute()方法执行update语句,再使用commit()方法提交事务。
sql = "UPDATE student SET age = 21 WHERE name = 'Tom'"
cursor.execute(sql)
conn.commit()
4)删除数据:使用execute()方法执行delete语句,再使用commit()方法提交事务。
sql = "DELETE FROM student WHERE name = 'Tom'"
cursor.execute(sql)
conn.commit()
2、批量操作
1)批量插入数据:使用executemany()方法批量执行insert语句,再使用commit()方法提交事务。
students = [('Tom', 20), ('Jerry', 21), ('Mike', 19)]
sql = "INSERT INTO student (name, age) VALUES (%s, %s)"
cursor.executemany(sql, students)
conn.commit()
2)批量更新数据:使用executemany()方法批量执行update语句,再使用commit()方法提交事务。
students = [('Tom', 21), ('Jerry', 22), ('Mike', 20)]
sql = "UPDATE student SET age = %s WHERE name = %s"
cursor.executemany(sql, students)
conn.commit()
3)批量删除数据:使用executemany()方法批量执行delete语句,再使用commit()方法提交事务。
names = ['Tom', 'Jerry', 'Mike']
sql = "DELETE FROM student WHERE name = %s"
cursor.executemany(sql, names)
conn.commit()
三、高级操作
1、事务处理
1)事务的基本操作:
try:
cursor1 = conn.cursor()
sql1 = "UPDATE student SET age = 20 WHERE name = 'Tom'"
cursor1.execute(sql1)
cursor2 = conn.cursor()
sql2 = "UPDATE student SET age = 22 WHERE name = 'Jerry'"
cursor2.execute(sql2)
# 提交事务
conn.commit()
except:
# 回滚事务
conn.rollback()
事务处理要点:
- 多条SQL语句必须使用同一个连接。
- 多个cursor对象必须保证在同一事务中执行。
- 出错时需要回滚事务。
2、预处理SQL语句
使用预处理语句可以有效地防止SQL注入攻击,也可以提高性能。示例代码如下:
sql = "INSERT INTO student (name, age) VALUES (%s, %s)"
cursor.execute(sql, ('Tom', 20))
conn.commit()
3、获取自增ID
使用lastrowid属性可以获取最后一次插入操作产生的自增ID。
sql = "INSERT INTO student (name, age) VALUES ('Tom', 20)"
cursor.execute(sql)
conn.commit()
id = cursor.lastrowid
print(id)
4、获取字段信息
使用description属性可以获取查询结果的字段信息。
sql = "SELECT * FROM student"
cursor.execute(sql)
# 获取字段信息
desc = cursor.description
print([col[0] for col in desc])
四、关闭连接
执行完所有操作后,需要关闭游标和连接以释放资源。
cursor.close()
conn.close()
总结
本文对Python pymysql的用法进行了详细的阐述,并从安装创建连接、基本操作、高级操作等多个方面进行了讲解。在实际应用中,可以结合具体情况选择不同的操作方式和参数,以最大程度地提高效率和安全性。