Python pymsql模块的使用


Posted in Python onSeptember 07, 2020

基本使用

首先要下载 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()

游标概念

可以看到在上面的示例中有一个游标的概念,其实这个也非常简单,就等同于光标的上下移动,每移动一次代表一条记录。

Python pymsql模块的使用

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 pymsql的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python实现2048小游戏
Mar 30 Python
用virtualenv建立多个Python独立虚拟开发环境
Jul 06 Python
python中计算一个列表中连续相同的元素个数方法
Jun 29 Python
利用Python如何制作好玩的GIF动图详解
Jul 11 Python
Python中的枚举类型示例介绍
Jan 09 Python
Python实现将HTML转成PDF的方法分析
May 04 Python
如何在Django配置文件里配置session链接
Aug 06 Python
python基于socket实现的UDP及TCP通讯功能示例
Nov 01 Python
python时间time模块处理大全
Oct 25 Python
python用分数表示矩阵的方法实例
Jan 11 Python
浅析Python打包时包含静态文件处理方法
Jan 15 Python
Python 的演示平台支持 WSGI 接口的应用
Apr 20 Python
Python虚拟环境的创建和使用详解
Sep 07 #Python
python用Tkinter做自己的中文代码编辑器
Sep 07 #Python
利用Python将图片中扭曲矩形的复原
Sep 07 #Python
python利用递归方法实现求集合的幂集
Sep 07 #Python
Python描述数据结构学习之哈夫曼树篇
Sep 07 #Python
python简单利用字典破解zip文件口令
Sep 07 #Python
python 如何快速复制序列
Sep 07 #Python
You might like
第三节--定义一个类
2006/11/16 PHP
利用php绘制饼状图的实现代码
2013/06/07 PHP
PHP中mb_convert_encoding与iconv函数的深入解析
2013/06/21 PHP
PHP闭包函数传参及使用外部变量的方法
2016/03/15 PHP
Yii2 GridView实现列表页直接修改数据的方法
2016/05/16 PHP
PHP定时任务获取微信access_token的方法
2016/10/10 PHP
PHP基于迭代实现文件夹复制、删除、查看大小等操作的方法
2017/08/11 PHP
JavaScript CSS修改学习第五章 给“上传”添加样式
2010/02/19 Javascript
javascript window.opener的用法分析
2010/04/07 Javascript
Jquery replace 字符替换实现代码
2010/12/02 Javascript
写js时遇到的一些小问题
2010/12/06 Javascript
用unescape反编码得出汉字示例
2014/04/24 Javascript
jQuery实现菜单式图片滑动切换
2015/03/14 Javascript
Javascript中3个需要注意的运算符
2015/04/02 Javascript
Bootstrap每天必学之前端开发框架
2015/11/19 Javascript
利用JS生成博文目录及CSS定制博客
2016/02/10 Javascript
浅谈JS原型对象和原型链
2016/03/02 Javascript
JS简单随机数生成方法
2016/09/05 Javascript
初学者AngularJS的环境搭建过程
2017/10/27 Javascript
Vue2.x通用条件搜索组件的封装及应用详解
2019/05/28 Javascript
javascript的delete运算符知识点总结
2019/11/19 Javascript
jquery绑定事件 bind和on的用法与区别分析
2020/05/22 jQuery
如何正确解决VuePress本地访问出现资源报错404的问题
2020/12/03 Vue.js
Vue 修改网站图标的方法
2020/12/31 Vue.js
[08:40]Navi Vs Newbee
2018/06/07 DOTA
Python实现中文数字转换为阿拉伯数字的方法示例
2017/05/26 Python
Python3.5多进程原理与用法实例分析
2019/04/05 Python
美国最大的宠物用品零售商:PetSmart
2016/11/14 全球购物
澳大利亚在线家具、灯饰和家居装饰店:LivingStyles
2018/11/20 全球购物
数控技术与应用毕业生自荐信
2013/09/24 职场文书
综治工作汇报材料
2014/10/27 职场文书
车间统计员岗位职责
2015/04/14 职场文书
2015年母亲节活动策划方案
2015/05/04 职场文书
法人代表证明书范本
2015/06/18 职场文书
2016春季校长开学典礼致辞
2015/11/26 职场文书
sqlserver2017共享功能目录路径不可改的解决方法
2021/04/16 SQL Server