mysql打印语句_最全总结 | 聊聊 Python 数据处理全家桶(Mysql 篇)
点击上方“AirPython”,选择“加为星标”
第一时间关注 Python 技术干货!
1. 前言
在爬虫、自动化、数据分析、软件测试、Web 等日常操作中,除 JSON、YAML、XML 外,还有一些数据经常会用到,比如:Mysql、Sqlite、Redis、MongoDB、Memchache 等
一般情况下,我们都会使用特定的客户端或命令行工具去操作;但是如果涉及到工程项目,将这部分数据操作集成到代码中使用才是王道
接下来,我将分几篇文章,和大家一起聊聊 Python 操作这些数据的 最优 方案
本篇从使用最为广泛的关系型数据库 - Mysql 开始讲起
2. 准备
首先,我们通过 Mysql 客户端或命令行创建一个数据库 xh
然后,在这个数据库下建一张简单的表 people
为了便于演示,这里只创建了三个字段:id、name、age,其中 id 为主键
Python 操作 Mysql 主要包含下面 3 种方式:
Python-MySql
PyMysql
SQLAlchemy
其中,
Python-MySql 由 C 语法打造,接口精炼,性能最棒;但是由于环境依赖多,安装复杂,已停止更新,仅支持 Python2
PyMysql 为替代 Python-Mysql 而生,纯 Python 语言编写的 Mysql 操作客户端,安装方便,支持 Python3
SQLAlchemy 是一个非常强大的 ORM 框架,不提供底层的数据库操作,主要是通过定义模型对应数据表结构,在 Python Web 编程领域应用广泛
由于 Python-MySql 不支持 Python3,所以本文只谈后 2 种操作方式
3. PyMysql
首先,使用 pip 安装依赖
# 安装依赖
连接数据库,获取数据库连接对象及游标对象
使用 pymysql 中的 connect() 方法,传入数据库的 HOST 地址、端口号、用户名、密码、待操作数据库的名称,即可以获取 数据库的连接对象
然后,再通过数据库连接对象,获取执行数据库具体操作的 游标对象
import pymysql
# 数据库连接self.db = pymysql.connect(host='localhost', port=3306, user='root', password='**', database='xh')
# 获取游标self.cursor = self.db.cursor()
接着,我们来实现增删改查操作
1、新增
新增包含新增单条数据和多条数据
对于单条数据的插入,只需要编写一条插入的 SQL 语句,然后作为参数执行上面游标对象的 execute(sql) 方法,最后使用数据库连接对象的 commit() 方法将数据提交到数据库中
# 插入一条数据
使用执行游标对象的 executemany() 方法,传入插入的 SQL 语句及 位置变量列表,可以实现一次插入多条数据
# 插入多条数据SQL,name和age是变量,对应列表
需要注意的是,PyMysql 会将 SQL 语句中的所有字段当做字符串进行处理,所以这里的 age 字段在 SQL 中被当做字符串处理
2、查询
查询分为三步,分别是:
通过游标对象执行具体的 SQL 语句
通过游标对象,获取到元组数据
遍历元组数据,查看结果
比如:查看数据表中所有的记录
# 查询所有记录
如果需要按条件查询某一条记录,只需要修改 SQL 语句即可实现
# 按id查询
3、更新
和 新增操作 类似,更新操作也是通过游标对象去执行更新的 SQL 语句,最后利用数据库连接对象将数据真实更新到数据库中
# 更新(通过id去更新)
4、删除
删除操作同查询、新增操作类似,只需要变更 SQL 语句即可
# 删除(通过id去删除数据)
最后,我们需要将游标对象和数据库连接对象资源释放掉
def teardown(self):
4. SQLAlchemy
首先,使用 SQLAlchemy 操作 Mysql 数据库同样先需要安装依赖库
# 安装依赖包
通过 SQLAlchemy 的内置方法 declarative_base() 创建一个基础类 Base
然后,自定义一个 Base 类的子类,内部定义静态变量,和上面数据表 people 中的字段一一对应
from sqlalchemy
接着,通过数据库名、用户名、密码及 Host 组装一个数据库连接地址,作为参数传入到 SQLAlchemy 的 create_engine() 方法中,以创建一个数据库引擎实例对象
# 创建数据库的引擎实例对象
最后,通过数据库引擎在数据库中创建表结构,并实例化一个 会话对象
需要注意的是,create_all() 方法中的 checkfirst 参数如果传入 True,则会判断数据表是否存在,如果表存在,则不会重新创建
# 创建表结构
这样所有的准备工作已经完成,接下来可以进行增删改查操作了
1、新增
新增操作同样包含插入一条记录和多条记录,分别对应会话对象的 add()、add_all() 方法
对于一条记录的新增操作,只需要实例化一个 People 对象,执行上面的会话对象的 add(instance) 和 commit() 两个方法,即可以将数据插入到数据表中
def add_item(self):
如果需要一次插入多条数据,只需要调用 add_all(列表数据) 即可
def add_items(self):
2、查询
查询数据表的操作对应会话对象的 query(可变参数)
方法中的参数指定要查询的字段值,还可以通过 all()、first() 级联方法限制要查询的数据
def query(self):
当然,也可以利用 filter_by(条件),按条件进行过滤
# 条件查询
3、更新
更新操作一般做法是:
query 查询出待更新的对象
直接更新对象中的数据
使用会话对象提交修改,完成更新操作
def update1(self, id):
需要指出的是,这里可以使用 update() 方法进行简写
def update2(self, id):
4、删除
删除操作对应 delete() 方法,同样是先查询,后删除,最后提交会话完成删除操作
以按照 id 删除某一条记录为例:
def del_by_id(self, id):
5.最后
本篇文章通过一张表的增删改查,详细讲解了 Python 操作 Mysql 的两种使用方式
在实际项目中,如果仅仅是简单的爬虫或者自动化,建议使用 PyMysql;否则建议直接上 SQLAlchemy,它更强大方便
我已经将文中全部源码上传到后台,关注公众号后回复「 dball 」即可获得全部源码
如果你觉得文章还不错,请大家 点赞、分享、留言 下,因为这将是我持续输出更多优质文章的最强动力!
推荐阅读带你用 Python 实现自动化群控(入门篇)Python 如何使用 HttpRunner 做接口自动化测试Python 自动化,Helium 凭什么取代 Selenium?
mysql打印语句_最全总结 | 聊聊 Python 数据处理全家桶(Mysql 篇)相关推荐
- insert into 多条数据_最全总结 | 聊聊 Python 数据处理全家桶(Sqlite篇)
点击上方"AirPython",选择"加为星标" 第一时间关注 Python 技术干货! 1. 前言 上篇文章 聊到 Python 处理 Mysql 数据库最常 ...
- python json key_最全总结 | 聊聊 Python 数据处理全家桶(配置篇)
1.前言 在实际项目中,经常会接触到各种各样的配置文件,它可以增强项目的可维护性 常用配件文件的处理方式,包含:JSON.ini / config.YAML.XML 等 本篇文章,我们将聊聊 Pyth ...
- 最全总结 | 聊聊 Python 数据处理全家桶(配置篇)
聊聊 Python 数据处理全家桶(Memca 篇) 点击上方"菜鸟学Python",选择"星标"公众号 重磅干货,第一时间送达 1.前言 在实际项目中,经常会 ...
- python中计算带分数_聊聊 python 数据处理全家桶(Redis篇)
作者:星安果 来源:AirPython 前面两篇文章聊到了 python 处理 Mysql.Sqlite 数据库常用方式,本篇文章继续说另外一种比较常用的数据存储方式:Redis Redis:Remo ...
- layui中table监听单元格_最全总结 | 聊聊 Python 办公自动化之 PPT(中)
点击上方 "AirPython",选择 "加为星标" 第一时间关注 Python 技术干货! 1. 前言 上一篇文章简单地介绍了 PPT 的文档结构,并使用 p ...
- python办公自动化博客_最全总结 | 聊聊 Python 办公自动化之 Word(下)
1. 前言 关于 Word 文档的读写,前面两篇文章分别进行了一次全面的总结 最全总结 | 聊聊 Python 办公自动化之 Word(上) 最全总结 | 聊聊 Python 办公自动化之 Word( ...
- mysql打印语句_大数据挖掘—(八):scrapy爬取数据保存到MySql数据库
(大数据挖掘-(七):读懂MySql数据库操作)(大数据挖掘神器--scrapy spider爬虫框架(五):解析多层网页) 通过往期的文章分享,我们了解了如何爬取想要的数据到Items中,也了解了如 ...
- mysql打印语句_抓取mysql、redis、mongodb、http等协议并打印语句
我们在开发过程中经常会请求mysql,redis,mongodb等数据库,调试程序一般会打印出相应的数据库语句,但是有的时候我们用一些很笨重的框架,因为封装程度比较高打印一个sql语句都会非常麻烦,而 ...
- mysql set语句_不得不注意!那些容易被忽视的MySQL字符集问题?
现象 在使用MySQL客户端书写SQL语句的时候,我们可以在字符串前边加_charset_name的符号,其中的charset_name对应着某个具体的字符集,废话不多说,先写两个例子看一下: mys ...
最新文章
- 帷幕的帷是什么意思_俗语:“宁娶寡妇,不娶生妻!”什么是“生妻”?老祖宗智慧...
- double类型怎么取余_数据类型和运算符
- 根据上边栏和下边栏的高度进行布局
- SAP Spartacus cx-page-layout 属性运行时的赋值原理, set 是如何被框架调用的?
- WebM VP8 SDK Usage/关于WebM VP8 SDK的用法
- 【转载】Direct3D基础知识
- Web MIDI API W3C
- Xamarin 设置可接受的版本
- hadoop系列一:hadoop集群安装
- Ajax方法详解以及多个Ajax并发执行
- 时差怎么理解_英国与中国的时差为什么隔8小时(英国与中国的时差解读)
- 数据挖掘:针对小样本与不均衡样本的机器学习算法实践
- img图片路径错误时,显示破图/图片裂开,如何处理?
- 利用原生JavaScript--实现小球无限转圈
- Python批量统计数据分布的偏度并画图
- IDEA如何使用Drop Frame退回上一步Debug
- android开发之上传头像
- 惠州学院计算机基础课程配套练习系统
- Java中的大端和小端
- 全球与中国雄激素和合成代谢类固醇市场发展前景与投资规划建议2021-2027年版