likes
comments
collection
share

Python使用PyMySQL连接操作MySQL数据库

作者站长头像
站长
· 阅读数 43

前面文章介绍了使用mysql-connector来连接操作MySQL数据库。今天我们就来使用PyMySQL连接数据库,实现简单的CDUD增删改查。

PyMySQL和mysql-connector都是Python中用于连接和操作MySQL数据库的库,但它们有一些区别。

  1. 安装方式:PyMySQL可以通过pip安装,而mysql-connector需要从官方网站下载并手动安装。
  2. 兼容性:PyMySQL兼容Python 2.x和3.x版本,而mysql-connector只兼容Python 3.x版本。
  3. API接口:PyMySQL使用纯Python编写,提供了一个简单易用的API接口。mysql-connector则是使用C编写的,提供了更多高级功能和选项。
  4. 性能:由于mysql-connector是使用C编写的,因此在性能方面可能会比PyMySQL更快一些。
  5. 功能支持:两者都支持基本的数据库操作,如查询、插入、更新和删除数据。但是mysql-connector提供了更多高级功能,如事务处理、存储过程和游标等。

总体来说,如果你需要一个简单易用的库来连接和操作MySQL数据库,并且需要兼容Python 2.x版本,则推荐使用PyMySQL。如果你需要更多高级功能,并且只需要兼容Python 3.x版本,则可以考虑使用mysql-connector。

安装

PyMySQL官网 Python使用PyMySQL连接操作MySQL数据库 安装其实很简单,和之前一样使用pip。 pip3 install PyMySQL

Python使用PyMySQL连接操作MySQL数据库 Requirements Python – one of the following:

  • CPython >= 3.7
  • Latest PyPy 3

MySQL Server – one of the following:

  • MySQL >= 5.7
  • MariaDB >= 10.3 当然我们也看到是有些前提条件的。我们要使用Python3,并且MySQL的版本要大于等于5.7

Python使用PyMySQL连接操作MySQL数据库 成功安装!(使用之前一定要确保我们已经成功安装。)

Python使用PyMySQL连接操作MySQL数据库 我们可以看到官网也是提供了CRUD Examples。但还是不是很详细。接下来我们较为详细的介绍一下。

创建表

我们编写一条创建表的SQL,然后通过execute()方法来为数据库创建表。

import pymysql
 
# 打开数据库连接
db = pymysql.connect(host='localhost',
                     user='user',
                     password='password',
                     database='db')
 
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
 
# 使用 execute() 方法执行 SQL,如果表存在则删除
cursor.execute("DROP TABLE IF EXISTS USER")
 
# 使用预处理语句创建表
sql = """"CREATE TABLE USER (Id VARCHAR(255), name VARCHAR(255))""""
 
cursor.execute(sql)
 
# 关闭数据库连接
db.close()

可以放心execute()是用来执行SQL语句的。所以我们插入操作就可以这样 。

插入记录

向User表插入一条记录

import pymysql
 
# 打开数据库连接
db = pymysql.connect(host='localhost',
                     user='user',
                     password='password',
                     database='db')
 
# 使用cursor()方法获取操作游标 
cursor = db.cursor()
 
# SQL 插入语句
sql = """INSERT INTO user (Id, name) VALUES ('1', 'zs')"""
try:
   # 执行sql语句
   cursor.execute(sql)
   # 提交到数据库执行(数据表内容有更新,必须使用到该语句)
   db.commit()
except:
   # 如果发生错误则回滚
   db.rollback()
 
# 关闭数据库连接
db.close()

当然我们也可以使用占位符这种方式,绑定参数。

import pymysql
 
# 打开数据库连接
db = pymysql.connect(host='localhost',
                     user='user',
                     password='password',
                     database='db')
 
# 使用cursor()方法获取操作游标 
cursor = db.cursor()
 
# SQL 插入语句
sql = "INSERT INTO user (Id, name) VALUES (%s, %s)" 
try:
   # 执行sql语句
   cursor.execute(sql, val)
   # 提交到数据库执行(数据表内容有更新,必须使用到该语句)
   db.commit()
except:
   # 如果发生错误则回滚
   db.rollback()
 
# 关闭数据库连接
db.close()

批量插入

向User表批量插入多条记录。批量插入使用executemany()方法,该方法的第二个参数是一个元组列表,包含了我们要插入的数据

import pymysql
 
# 打开数据库连接
db = pymysql.connect(host='localhost',
                     user='user',
                     password='password',
                     database='db')
 
# 使用cursor()方法获取操作游标 
cursor = db.cursor()
 
# SQL 插入语句
sql = "INSERT INTO user (Id, name) VALUES (%s, %s)" 
val = [ ('2', 'ls'), ('3', 'ww'), ('4', 'zy') ]
try:
   # 执行sql语句
   cursor.executemany(sql, val)
   # 提交到数据库执行(数据表内容有更新,必须使用到该语句)
   db.commit()
except:
   # 如果发生错误则回滚
   db.rollback()
 
# 关闭数据库连接
db.close()

查询数据

  • fetchone():  该方法获取下一个查询结果集。结果集是一个对象。
  • fetchall(): 接收全部的返回结果行。
  • rowcount:  这是一个只读属性,并返回执行execute()方法后影响的行数。
import pymysql
 
# 打开数据库连接
db = pymysql.connect(host='localhost',
                     user='user',
                     password='password',
                     database='db')
 
# 使用cursor()方法获取操作游标 
cursor = db.cursor()
 
cursor = db.cursor() 
cursor.execute("SELECT * FROM user")
myresult = mycursor.fetchall() # fetchall() 获取所有记录 
for x in myresult: print(x)

更新数据

import pymysql
 
# 打开数据库连接
db = pymysql.connect(host='localhost',
                     user='user',
                     password='password',
                     database='db')
 
# 使用cursor()方法获取操作游标 
cursor = db.cursor()
 
# SQL 更新语句
try:
   # 执行sql语句
   cursor.execute(UPDATE user SET name = %s WHERE Id = %s", ('king', '4'))
   # 提交到数据库执行(数据表内容有更新,必须使用到该语句)
   db.commit()
except:
   # 如果发生错误则回滚
   db.rollback()
 
# 关闭数据库连接
db.close()

删除记录

我们编写删除语句通过DELTE FROM

import pymysql
 
# 打开数据库连接
db = pymysql.connect(host='localhost',
                     user='user',
                     password='password',
                     database='db')
 
# 使用cursor()方法获取操作游标 
cursor = db.cursor()
 
# SQL 更新语句
try:
   # 执行sql语句
   cursor.execute(DELETE FROM user where id = '1')
   # 提交到数据库执行(数据表内容有更新,必须使用到该语句)
   db.commit()
except:
   # 如果发生错误则回滚
   db.rollback()
   
cursor.execute("SELECT * FROM user") 
myresult = cursor.fetchall() # fetchall() 获取所有记录 for x in myresult: print(x)
# 关闭数据库连接
db.close()

事务

对于支持事务的数据库, 在Python数据库编程中,当游标建立之时,就自动开始了一个隐形的数据库事务。

  • commit()方法游标的所有更新操作
  • rollback()方法回滚当前游标的所有操作。每一个方法都开始了一个新的事务。

可以看到前面对数据库数据会产生变化的,都手动提交了事务。遇到异常进行回滚操作。

总结

可以发现PyMySQL和mysql-connector的操作基本上是一样的。

  1. pymysql.connect():创建数据库连接对象。
  2. db.cursor():获取数据库的操作对象
  3. mycursor.execute(sql, parameters):来运行sql,第二个参数为元组
  4. 为了防止数据库查询发生 SQL 注入的攻击,我们可以使用 %s 占位符
  5. mycursor.executemany():执行多条sql操作
  6. mydb.commit():提交事务
  7. mycursor.fetchall():执行为查询SQL后,获取全部的记录
  8. mycursor.fetone():执行为查询SQL后,获取一条的记录

更详细的API可以查看官方文档。

Python使用PyMySQL连接操作MySQL数据库

转载自:https://juejin.cn/post/7365903656166014986
评论
请登录