什么是PyMysql
PyMysql是一个纯 Python 实现的 MySQL 客户端库,允许你在 Python 程序中与 MySQL 数据库进行交互。
安装PyMysql
PyMysql地址:https://pypi.org/project/PyMySQL/
pip install pymysql
使用PyMysql
连接mysql
import pymysql
# 数据库连接参数
host = '192.168.189.71' # 数据库主机地址
port = 3306 # 数据库端口
user = 'root' # 数据库用户名
password = '123456' # 数据库密码
database = 'test' # 数据库名称
charset = 'utf8mb4' # 编码格式
# 连接到数据库
connection = pymysql.connect(
host=host,
port=port,
user=user,
password=password,
database=database,
charset=charset,
# cursorclass=pymysql.cursors.DictCursor # 使用字典类型游标
)
print("连接成功")
查询数据
# 创建游标对象
cursor = connection.cursor()
# 执行SQL查询
sql = "select * from table_test;"
cursor.execute(sql)
# 获取查询结果
results = cursor.fetchall()
for row in results:
print(row)
# 关闭游标
cursor.close()
查询打印到的数据
- 元组类型数据
- 字典类型数据
添加数据
try:
# 创建游标对象
cursor = connection.cursor()
# 编写sql语句
sql = "insert into table_test (id, name, age) VALUES (%s, %s, '22')"
values = (3, 'Spike') # sql参数
# 执行SQL插入
cursor.execute(sql, values)
# 提交事务
connection.commit()
print("数据插入成功")
except Exception as e:
# 出现异常,回滚事务
connection.rollback()
finally:
# 关闭游标
cursor.close()
# 关闭连接
connection.close()
更新数据
try:
# 创建游标对象
cursor = connection.cursor()
# 编写sql语句
sql = "UPDATE table_test SET age = %s WHERE id = %s"
values = (30, 3)
# 执行SQL
cursor.execute(sql, values)
# 提交事务
connection.commit()
print("数据更新成功")
except Exception as e:
# 出现异常,回滚事务
connection.rollback()
finally:
# 关闭游标
cursor.close()
# 关闭连接
connection.close()
删除数据
try:
# 创建游标对象
cursor = connection.cursor()
# 编写sql语句
sql = "DELETE FROM table_test WHERE id = %s"
value = (3,)
# 执行SQL
cursor.execute(sql, value)
# 提交事务
connection.commit()
print("数据删除成功")
except Exception as e:
# 出现异常,回滚事务
connection.rollback()
finally:
# 关闭游标
cursor.close()
# 关闭连接
connection.close()
使用上下文管理器
自动关闭数据库连接、自动关闭游标
import pymysql
# 数据库连接参数
host = '192.168.xxx.xxx' # 数据库主机地址
port = 3306 # 数据库端口
user = 'root' # 数据库用户名
password = '******' # 数据库密码
database = 'test' # 数据库名称
charset = 'utf8mb4' # 编码格式
# 使用上下文管理器连接到数据库
with pymysql.connect(
host=host,
port=port,
user=user,
password=password,
database=database,
charset=charset
) as connection:
with connection.cursor() as cursor:
# 编写sql语句
sql = "insert into table_test (id, name, age) VALUES (%s, %s, '22')"
values = (3, 'Spike') # sql参数
try:
# 执行SQL
cursor.execute(sql, values)
# 提交事务
connection.commit()
print("执行成功")
except Exception as e:
print("程序异常")
connection.rollback()
游标常用方法
执行一条sql语句
语法:
cursor.execute(query, args=None)
- query是要执行的SQL语句
- args是SQL语句中的参数
示例:
cursor.execute("insert into table_test (id, name, age) VALUES (%s, %s, '22')", (3, 'Spike'))
执行多条sql语句
语法:
cursor.executemany(query, args)
- query是要执行的SQL语句
- args是一个包含多组参数的列表。
示例:
sql = "INSERT INTO table_test (id, name, age) VALUES (%s, %s, %s)"
values = [(1, 'Tom', 20), (2, 'Jerry', 18), (3, 'Spike', 25)]
cursor.executemany(sql, values)
查询一条数据
语法:
cursor.fetchone()
示例:
result = cursor.fetchone()
print(result)
查询多条数据
语法:
cursor.fetchall()
示例:
results = cursor.fetchall()
for row in results:
print(row)
查询返回结果中指定的行数
语法:
cursor.fetchmany(size)
示例:
# 获取查询结果中的前两行
results = cursor.fetchmany(2)
for row in results:
print(row)
受影响的行数
语法:
cursor.rowcount
- 例如执行 INSERT、UPDATE 或 DELETE 操作后影响的行数。
示例:
cursor.execute(sql, value)
# 受影响行数
print(cursor.rowcount)
获取最后插入行的ID
语法:
cursor.lastrowid
- 获取最后插入行的ID(通常用于 AUTO_INCREMENT 字段)
示例:
cursor.execute(sql, value)
print(cursor.lastrowid) # 输出最后插入行的ID