python数据库操作指南之PyMysql使用详解
作者:南京丛林Jungle 发布时间:2023-01-02 04:04:17
PyMysql使用详解
在编写小脚本时,PyMysql是快速连接并操作数据库的一个不错选择。
安装
pip3 install PyMysql
# 可使用 pip list 查看此环境安装了哪些第三方库 pip list | grep PyMysql
使用
import pymysql
连接数据库
使用connect函数创建连接对象,此连接对象提供关闭数据库、事务回滚等操作
一般传参为:host, user, password, port(默认为3306), database(想要连接的数据库名)
db = pymysql.connect(host='127.0.0.1',
user='root',
password='pwd',
database='database_name')
连接对象的常见方法:
方法名 | 说明 |
---|---|
cursor() | 获取游标对象,操作数据库,如执行DML操作,调用存储过程等 |
commit() | 提交事务 |
rollback() | 回滚事务 |
close() | 关闭数据库连接 |
操作数据库
操作数据库主要使用cursor游标对象,对数据库进行操作
cursor游标对象的常见方法
方法名 | 说明 |
---|---|
close() | 关闭当前游标对象 |
execute(query) | 执行数据库操作,如sql语句或数据库命令 |
executemany(query,params) | 用于批量操作,如:批量更新 |
fetchone() | 获取查询结果集中的下一条记录 |
fetchmany(size) | 获取查询结果集中指定数量的记录,size默认为1 |
fetchall() | 获取查询结果集中所有记录 |
nextset() | 跳至下一个可用的结果集 |
fetchone(),fetchmany(size),fetchall() 三者的返回值都是元组 或 元组的嵌套 查
查询主要获取结果集,注意fetchone 得到的是元组, fetchmany(size),fetchall()得到的是元组的嵌套
注意:
如果既要使用python的字符串解析%,sql语句中又包含sql的模糊查询占位符%, 模糊查询使用%%即可,这样不会报错
import pymysql
# 创建数据库连接对象
db = pymysql.connect(host='127.0.0.1',
user='root',
password='pwd',
database='database_name')
# 创建游标对象
cursor = db.cursor()
table_name = 'map_point'
sql = "SELECT * FROM %s WHERE username LIKE 'DL%%' " % table_name
try:
cursor.execute(sql) # 执行sql语句,也可执行数据库命令,如:show tables
result = cursor.fetchall() # 所有结果
print(result)
except Exception as e:
db.rollback()
print("查询失败")
print(e)
finally:
cursor.close() # 关闭当前游标
db.close() # 关闭数据库连接
循环查询:
在一些场景中,需要进行循环查询,判断,此时在执行完execute查询语句后,务必进行commit提交,否则每次查询到的数据都是之前查询结果的快照,也就是旧数据。
或者采用第二种方案,创建connect连接时,增添autocommit=True属性,自动进行commit提交。
增,删,改
增删改需要有提交事务的操作,查不需要提交事务,但如果循环查询,务必提交事务,否则结果都是重复的
创建连接对象——db= pymysql()
创建cursor游标对象——cur = db.cursor()
数据操作——cur.execute(sql)
提交连接事务——db.commit()
关闭cursor游标对象——cur.close()
关闭连接对象——db.close( )
import pymysql
# 创建数据库连接对象
db = pymysql.connect(host='127.0.0.1',
user='root',
password='pwd',
database='database_name')
# 创建游标对象
cursor = db.cursor()
table_name = 'table_name '
user_id = 'yyy'
user_no = 'xxx'
sql = "UPDATE %s SET user_no = '%s' WHERE user_id = '%s'" % (table_name, user_no, user_id)
try:
cursor.execute(sql) # 执行sql语句,也可执行数据库命令,如:show tables
db.commit() # 增删改,必须执行事务
print("数据更新成功")
except Exception as e:
db.rollback() # 若出现失败,进行回滚
print("数据更新失败")
print(e)
finally:
cursor.close() # 关闭当前游标
db.close() # 关闭数据库连接
使用循环批量更新
db = pymysql.connect(host='127.0.0.1',
user='root',
password='pwd',
database='database_name')
table_name = 'table_name'
update_list = ['xxx2', 'xxxx3']
condition_list = ['xxx', 'xxx1']
# 条件集合,更新集合长度相等时可使用,可根据其他情况重新编写
cursor = db.cursor()
for i in range(len(condition_list)):
sql = "UPDATE %s SET user_no = '%s' WHERE user_id = '%s'" % (table_name, update_list[i],
condition_list[i])
print('执行sql语句:' + sql)
try:
cursor.execute(sql)
db.commit()
print("数据更新成功" + str(i+1) + '条')
except Exception as e:
db.rollback()
print("数据更新失败")
print(e)
cursor.close()
db.close()
使用executemany(query, param) 批量更新
params为每条记录的维度,可为嵌套数组和元组
注意:sql语句中需要更改的数据不管什么类型,统一使用%s作为占位符,不需要加引号
# 创建数据库连接对象
db = pymysql.connect(host='127.0.0.1',
user='root',
password='pwd',
database='database_name')
# 创建游标对象
cursor = db.cursor()
update_list = ['a', 'b']
condition_list = ['a1', 'b1']
# 条件数组和需要更新的数据数组是分开的,因为param需要以每条的维度,所以可以使用拉链函数合并
params = zip(update_list, condition_list) # 或 param = [['a', 'a1'], ['b', 'b1']]
sql = "UPDATE map_point SET storageLocation_no = %s WHERE position_id = %s" # 注意 这里的 占位%s 都不用加引号
try:
cursor.executemany(sql, params) # 执行sql语句
db.commit() # 执行事务
print("数据批量更新成功")
except Exception as e:
db.rollback()
print("数据更新失败")
print(e)
finally:
cursor.close() # 关闭当前游标
db.close() # 关闭数据库连接
来源:https://blog.csdn.net/iamballer77/article/details/127238853
猜你喜欢
- 介绍Python常见的字符串处理方式字符串截取 >>>s = 'hello'>>>s[0
- 这篇文章主要介绍了python实现windows桌面截图代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值
- 大家都知道系统存储过程是无法用工具导出的(大家可以试试 >任务>生成SQL脚本) 因为系统存储过程一般是不让开发人员修改的。 需
- 目前为止,我们使用函数时所用的参数都是位置参数,即传入函数的实际参数必须与形式参数的数量和位置对应。而本节将介绍的关键字参数,则可以避免牢记
- 在动态删除iframe时,同时把iframe里嵌套的iframe 删除,遇到了这个问题。本来之前都没报错,突然昨天他们嵌套了一个 跨域 的网
- PHP页面中如果不希望出现以下情况: 单引号被转义为 \' 双引号被转义为 \" 那么可以进行如下设置以防止: 方法一:在
- 本文给大家介绍PHP中Http协议post请求参数,具体内容如下所示:WEB开发中信息基本全是在POST与GET请求与响应中进行,GET因其
- event-----------------------------------------------------------------
- 在这之前我们先回顾以前用php导出excel,我直接写成方法在这里:public static function phpExcelList(
- 定义切片区别于数组,是引用类型, 不是值类型。数组是固定长度的,而切片长度是可变的,我的理解是:切片是对数组一个片段的引用。var s1 [
- 看到网上有一篇文章,是介绍如何做网站测试的.从一开始的链接测试,页面内容测试,到浏览器兼容性测试,负载压力测试,一直到最后的安全性测试,甚至
- 在/etc/profile.d/简历oracle.sh内容如下在NLS_LANG设置编码ORACLE_HOME=/usr/lib/oracl
- JavaScript是一门OOP,而有些人说,JavaScript是基于对象的。1) 如何创建对象:1. 使用constructor,例如:
- 或许你知道,Internet Explorer 6 已经不是最先进的浏览器了。事实上,它已经八岁了,但是很多人还在使用这个不安全的浏览器。正
- thinkphp查询mssql数据库出现乱码的原因是ThinkPHP默认为UTF-8,而msmsql数据库是简体中文版,存储的是GB2312
- 存储过程采用的是select top 加 not in的方式完成,速度也算是相当快了 我测试过了百万级数据量一般查询在1秒一下,贴出来大家交
- 首先介绍下比较简单但必不可少且实用的知识,可以当手册查询,适合像我一样的新手看。PHP常用库函数介绍一、PHP字符串操作常用函数1.确定字符
- 我在网上查找了下接口测试相关的资料,大都重点是以数据驱动的形式,将用例维护在文本或表格中,而没有说明怎么样去生成想要的用例,问题:测试接口时
- 本文实例讲述了php实现的三个常用加密解密功能函数。分享给大家供大家参考,具体如下:算法一://加密函数function lock_url(
- 内容摘要: Request和Response这两个对象是ASP所提供的内置对象中最常用的两个。在浏览器(或其他用户代理)和Web服