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使用MYSQLDB实现从数据库中导出XML文件的方法
May 11 Python
Python中subprocess模块用法实例详解
May 20 Python
Python 12306抢火车票脚本 Python京东抢手机脚本
Feb 06 Python
TensorFlow神经网络优化策略学习
Mar 09 Python
python-itchat 获取微信群用户信息的实例
Feb 21 Python
python 经典数字滤波实例
Dec 16 Python
Python 面向对象之类class和对象基本用法示例
Feb 02 Python
Python 爬虫性能相关总结
Aug 03 Python
Python 测试框架unittest和pytest的优劣
Sep 26 Python
Python常用断言函数实例汇总
Nov 30 Python
selenium+headless chrome爬虫的实现示例
Jan 08 Python
浅析python中特殊文件和特殊函数
Feb 24 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
smarty模板引擎使用内建函数foreach循环取出所有数组值的方法
2015/01/22 PHP
PHP中foreach()用法汇总
2015/07/02 PHP
php文件上传类完整实例
2016/05/14 PHP
自制PHP框架之设计模式
2017/05/07 PHP
php实现微信公众平台发红包功能
2018/06/14 PHP
eval的两组性能测试数据
2012/08/17 Javascript
JQuery对class属性的操作实现按钮开关效果
2013/10/11 Javascript
js 获取元素所有兄弟节点的实现方法
2016/09/06 Javascript
Vue自定义指令拖拽功能示例
2017/02/17 Javascript
Angular浏览器插件Batarang介绍及使用
2018/02/07 Javascript
vue基于mint-ui实现城市选择三级联动
2020/06/30 Javascript
Vue 实现CLI 3.0 + momentjs + lodash打包时优化
2019/11/13 Javascript
小程序开发之模态框组件封装
2020/04/23 Javascript
JavaScript代码简化技巧实例解析
2020/09/09 Javascript
[01:02:48]2018DOTA2亚洲邀请赛小组赛 A组加赛 Newbee vs Liquid
2018/04/03 DOTA
详解Python中的元组与逻辑运算符
2015/10/13 Python
对比Python中__getattr__和 __getattribute__获取属性的用法
2016/06/21 Python
使用pandas对两个dataframe进行join的实例
2018/06/08 Python
python使用__slots__让你的代码更加节省内存
2018/09/05 Python
使用django-guardian实现django-admin的行级权限控制的方法
2018/10/30 Python
Python3分析处理声音数据的例子
2019/08/27 Python
Django视图扩展类知识点详解
2019/10/25 Python
python 爬虫网页登陆的简单实现
2020/11/30 Python
纯css3制作网站后台管理面板
2014/12/30 HTML / CSS
希尔顿酒店中国网站:Hilton中国
2017/03/11 全球购物
理肤泉加拿大官网:La Roche-Posay加拿大
2018/07/06 全球购物
Trip.com澳大利亚:在线旅行社
2019/12/01 全球购物
介绍一下XMLHttpRequest对象
2012/02/12 面试题
大学生四个方面的自我评价
2013/09/19 职场文书
宠物店的创业计划书范文
2014/01/11 职场文书
公司活动邀请函
2014/01/24 职场文书
大学生违纪检讨书范文
2015/05/07 职场文书
2015年高三年级组工作总结
2015/07/21 职场文书
学困生帮扶工作总结
2015/08/13 职场文书
保险公司增员口号
2015/12/25 职场文书
创业计划书之奶茶店开店方案范本!
2019/08/06 职场文书