Python pymsql模块
pymsql
pymysql这款第三方库可以帮助我们利用python语言与mysql进行链接
基本使用
首先要下载pymysql
pip install pymsql
以下是pymysql的基本使用
import pymysql
# 链接,C/S架构,TCP链接
conn = pymysql.connect(
host="localhost",
database="db1",
charset="utf8mb4",
user="root",
cursorclass=pymysql.cursors.DictCursor, # 记录结果,字典显示
# password = "your password",
)
# 游标
cursor = conn.cursor()
# 执行sql
sql = "show tables"
res = cursor.execute(sql) # 提交执行,返回sql影响成功的行数
print(res) # 2 代表该数据库下有2个表
print(cursor.fetchall()) # [{'Tables_in_db1': 't1'}, {'Tables_in_db1': 't2'}]
cursor.close() # 关闭游标
conn.close()
游标概念
可以看到在上面的示例中有一个游标的概念,其实这个也非常简单,就等同于光标的上下移动,每移动一次代表一条记录。

在pymsql中,对于select等操作返回的结果都可以通过游标的移动配合相应方法函数来进行读取。
sql注入
如果你的某些sql语句要进行字符串拼接,那么一定要使用pymysql提供的execute()方法进行拼接,不要去用python中的%或format()方法,这可能导致出现sql注入问题带来不安全的隐患。
注意:使用
execute()时,不可传入表名,数据库名。否则会抛出语法错误,这是因为在拼接时会自动添加上``号
import pymysql
# 链接
conn = pymysql.connect(
host="localhost",
database="db1",
charset="utf8mb4",
user="root",
cursorclass=pymysql.cursors.DictCursor, # 记录结果,字典显示
# password = "your password",
)
# 游标
cursor=conn.cursor()
# 执行sql
sql = "select * from t1 where id=%s"
res = cursor.execute(sql,("1",)) # 提交执行,返回sql影响成功的行数 这里拼接能预防sql注入问题
print(res) # 1 查出一条记录
print(cursor.fetchall()) # 拿到所有记录的结果
cursor.close() # 关闭游标
conn.close()
事务提交
在执行UPDATE/INSERT/DELETE之类的操作,必须使用conn.commit()进行事务提交后方可生效。
或者你可以在实例化conn对象时为他指定auto_commit参数为true即可自动提交事务。
import pymysql
# 链接
conn = pymysql.connect(
host="localhost",
database="db1",
charset="utf8mb4",
user="root",
cursorclass=pymysql.cursors.DictCursor, # 记录结果,字典显示
autocommit = True, # 自动提交
# password = "your password",
)
# 游标
cursor=conn.cursor()
# 执行sql
sql = "insert into t1(name) values(%s)"
res = cursor.execute(sql,("新记录",)) # 提交执行,返回sql影响成功的行数 这里拼接能预防sql注入问题
print(res) # 1 成功插入一条记录
print(cursor.lastrowid) #在插入语句后查看,查看最后一条记录的行号
print(cursor.fetchall())
# conn.commit() # 手动提交
cursor.close() # 关闭游标
conn.close()
提交多条
使用cursor.executemany()方法可一次性提交多条sql操作。
import pymysql
# 链接
conn = pymysql.connect(
host="localhost",
database="db1",
charset="utf8mb4",
user="root",
cursorclass=pymysql.cursors.DictCursor, # 记录结果,字典显示
autocommit = True, # 自动提交
# password = "your password",
)
# 游标
cursor=conn.cursor()
# 执行sql
sql = "insert into t1(name) values(%s)" # 同一条命令,执行3次
res = cursor.executemany(sql,[("新记录1"),("新纪录2"),("新纪录3")]) # 提交执行,返回sql影响成功的行数 这里拼接能预防sql注入问题
print(res) # 3 成功插入三条记录
print(cursor.lastrowid) #在插入语句后查看,查看最后一条记录的行号
print(cursor.fetchall())
cursor.close() # 关闭游标
conn.close()
游标相关
获取到一条记录后,我们可以控制游标移动。
也可以控制查看游标后的多少条记录
游标每移动一次代表一条记录
| 命令解析 | 描述 |
|---|---|
| cursor.scroll(3,mode='absolute') | 游标以绝对位置向后移动3条记录 |
| cursor.scroll(3,mode='relative') | 游标以当前位置向后移动3条记录 |
| 注意:游标移动的条数即为记录的条数,如果移动值为负N就代表上N条记录 | |
如果我们想获取记录,可使用以下三个方法
| 命令解析 | 描述 |
|---|---|
| cursor.fetchone() | 获取第一条记录,游标向下移动一行 |
| cursor.fetchmany(2) | 获取接下来的两条记录,游标向下移动两行 |
| cursor.fetchall() | 获取全部记录,游标移动到末尾,返回的是一个列表 |
import pymysql
# 链接
conn = pymysql.connect(
host="localhost",
database="db1",
charset="utf8mb4",
user="root",
cursorclass=pymysql.cursors.DictCursor, # 记录结果,字典显示
autocommit = True, # 自动提交
# password = "your password",
)
# 游标
cursor=conn.cursor()
# 执行sql
sql = "select * from t1" # t1表中4条记录
cursor.execute(sql)
print(cursor.fetchone()) 游标移动到2的位置
cursor.scroll(2,mode='relative') 向下移动2,当前游标为4
print(cursor.fetchone())
cursor.close() # 关闭游标
conn.close()
"""
{'id': 1, 'name': '记录1'}
{'id': 4, 'name': '记录4'}
"""
插入行号
如果执行的是INSERT操作,可以在插入后查看最后插入的ID行号
import pymysql
# 链接
conn = pymysql.connect(
host="localhost",
database="db1",
charset="utf8mb4",
user="root",
cursorclass=pymysql.cursors.DictCursor, # 记录结果,字典显示
autocommit = True, # 自动提交
# password = "your password",
)
# 游标
cursor=conn.cursor()
# 执行sql
sql = "insert into t1(name) values(%s)" # 同一条命令,执行3次
res = cursor.executemany(sql,[("新记录1"),("新纪录2"),("新纪录3")]) # 提交执行,返回sql影响成功的行数 这里拼接能预防sql注入问题
print(res) # 3 成功插入三条记录
print(cursor.lastrowid) #在插入语句后查看,查看最后一条记录的行号
print(cursor.fetchall())
# conn.commit() # 手动提交
cursor.close() # 关闭游标
conn.close()
Python pymsql模块的更多相关文章
- 一文搞懂 Python 的模块和包,在实战中的最佳实践
最近公司有个项目,我需要写个小爬虫,将爬取到的数据进行统计分析.首先确定用 Python 写,其次不想用 Scrapy,因为要爬取的数据量和频率都不高,没必要上爬虫框架.于是,就自己搭了一个项目,通过 ...
- Python标准模块--threading
1 模块简介 threading模块在Python1.5.2中首次引入,是低级thread模块的一个增强版.threading模块让线程使用起来更加容易,允许程序同一时间运行多个操作. 不过请注意,P ...
- Python的模块引用和查找路径
模块间相互独立相互引用是任何一种编程语言的基础能力.对于“模块”这个词在各种编程语言中或许是不同的,但我们可以简单认为一个程序文件是一个模块,文件里包含了类或者方法的定义.对于编译型的语言,比如C#中 ...
- Python Logging模块的简单使用
前言 日志是非常重要的,最近有接触到这个,所以系统的看一下Python这个模块的用法.本文即为Logging模块的用法简介,主要参考文章为Python官方文档,链接见参考列表. 另外,Python的H ...
- Python标准模块--logging
1 logging模块简介 logging模块是Python内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级.日志保存路径.日志文件回滚等:相比print,具备如下优点: 可以通过设置不同 ...
- python基础-模块
一.模块介绍 ...
- python 安装模块
python安装模块的方法很多,在此仅介绍一种,不需要安装其他附带的pip等,python安装完之后,配置环境变量,我由于中英文分号原因,环境变量始终没能配置成功汗. 1:下载模块的压缩文件解压到任意 ...
- python Queue模块
先看一个很简单的例子 #coding:utf8 import Queue #queue是队列的意思 q=Queue.Queue(maxsize=10) #创建一个queue对象 for i in ra ...
- python logging模块可能会令人困惑的地方
python logging模块主要是python提供的通用日志系统,使用的方法其实挺简单的,这块就不多介绍.下面主要会讲到在使用python logging模块的时候,涉及到多个python文件的调 ...
随机推荐
- U盘数据泄露,用不到30行的Python代码就能盗走
今天跟大家分享下一段简单的代码,希望能给经常用U盘的人警戒,提高信息安全意识. 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做 ...
- Spring Cloud 之 基础学习资料
通过调研发现,官方及国内基础学习资料已经比较完善,故不再重复赘述,安静地做个搬运工. 如工作中遇到比较复杂或重要的点,再做详述. 官方 Spring 官方入门系列 服务注册与发现 Service Re ...
- java 用集合完成随机点名器和库存管理案例
一 随机点名器 1.案例需求 随机点名器,即在全班同学中随机的找出一名同学,打印这名同学的个人信息. 我们来完成随机点名器,它具备以下3个内容: 存储所有同学姓名 总览全班同学姓名 随机点名其中一人, ...
- ubuntu18.04配置与美化
一:初步系统配置 1 不可或缺的更新 如果在上一步中勾选了安装 Ubuntu 时下载更新,那么大部分的系统更新已经下载完毕. 不过为了确保,先移步到 设置→详细信息 ,点击右下角的 检查更新 ,如果存 ...
- 使用Java API进行tar.gz文件及文件夹压缩解压缩
在java(JDK)中我们可以使用ZipOutputStream去创建zip压缩文件,(参考我之前写的文章 使用java API进行zip递归压缩文件夹以及解压 ),也可以使用GZIPOutputSt ...
- topic的相关操作
1.建立topic cd 进入kafka的安装根目录的bin目录下 执行:./kafka-topics.sh --zookeeper ip:port,ip:port,ip:port/kafka-tes ...
- Excel清除隐藏的引号或空格
问题场景 导出到Excel的数据内容有时候被"暗中"添加了[引号]或[空格]等字符. 尤其还"隐藏"了,以至于相同的内容,数据格式都没有问题,不能进行函数操作, ...
- html中datalist 是什么??????
<datalist>标签定义选项列表,与input元素配合使用该元素,来定义input可能值.datdallist及其选项不会被显示出来,它仅仅是合法的输入值列表. <input i ...
- LeetCode 92 | 大公司常考的面试题,翻转链表当中指定部分
今天是LeetCode专题的第58篇文章,我们一起来看看LeetCode 92题,翻转链表II(Reverse LInked List II). 这题的官方难度是Medium,2451个赞同,145个 ...
- 第五篇Scrum冲刺博客--Interesting-Corps
第五篇Scrum冲刺博客 站立式会议 1.会议照片 2.队友完成情况 团队成员 昨日完成 今日计划 鲍鱼铭 音乐详情页面跳转.设计及布局实现设计 搜索页面以及音乐详情页面数据导入及测试 叶学涛 编写分 ...