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中的特殊语法:filter、map、reduce、lambda介绍
Apr 14 Python
详解Python多线程
Nov 14 Python
python实现应用程序在右键菜单中添加打开方式功能
Jan 09 Python
如何用Python合并lmdb文件
Jul 02 Python
python利用thrift服务读取hbase数据的方法
Dec 27 Python
实例讲解Python中浮点型的基本内容
Feb 11 Python
Python中的random.uniform()函数教程与实例解析
Mar 02 Python
python实现五子棋小程序
Jun 18 Python
python中property属性的介绍及其应用详解
Aug 29 Python
python多进程并行代码实例
Sep 30 Python
opencv-python 提取sift特征并匹配的实例
Dec 09 Python
Python Merge函数原理及用法解析
Sep 16 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
实时抓取YAHOO股票报价的代码
2006/10/09 PHP
Win下如何安装PHP的APC拓展
2013/08/07 PHP
php从数据库中获取数据用ajax传送到前台的方法
2018/08/20 PHP
PHP生成图表pChart的示例解析
2020/07/31 PHP
在JavaScript中使用inline函数的问题
2007/03/08 Javascript
JS URL传中文参数引发的乱码问题
2009/09/02 Javascript
javascript下利用arguments实现string.format函数
2010/08/24 Javascript
javascript高级程序设计第二版第十二章事件要点总结(常用的跨浏览器检测方法)
2012/08/22 Javascript
jquery插件hiAlert实现网页对话框美化
2015/05/03 Javascript
jquery特效 点击展示与隐藏全文
2015/12/09 Javascript
JavaScript记录光标在编辑器中位置的实现方法
2016/04/22 Javascript
jQuery获取及设置表单input各种类型值的方法小结
2016/05/24 Javascript
confirm确认对话框的实现方法总结
2016/06/17 Javascript
jQuery soColorPacker 网页拾色器
2016/06/22 Javascript
完美解决jQuery 鼠标快速滑过后,会执行多次滑出的问题
2016/12/08 Javascript
js控制一个按钮是否可点击(可使用)disabled的实例
2017/02/14 Javascript
微信小程序 基础知识css样式media标签
2017/02/15 Javascript
用nodeJS搭建本地文件服务器的几种方法小结
2017/03/16 NodeJs
基于angular2 的 http服务封装的实例代码
2017/06/29 Javascript
教你使用vue-cli快速构建的小说阅读器
2019/05/13 Javascript
微信小程序自定义单项选择器样式
2019/07/25 Javascript
原生js canvas实现鼠标跟随效果
2020/08/02 Javascript
[01:09]DOTA2次级职业联赛 - 99战队宣传片
2014/12/01 DOTA
python+Django+apache的配置方法详解
2016/06/01 Python
利用Python暴力破解zip文件口令的方法详解
2017/12/21 Python
Python实现合并同一个文件夹下所有PDF文件的方法示例
2018/04/28 Python
python3 flask实现文件上传功能
2020/03/20 Python
python3 中文乱码与默认编码格式设定方法
2018/10/31 Python
基于python实现图片转字符画代码实例
2020/09/04 Python
伯克斯奥特莱斯:Burkes Outlet
2019/03/30 全球购物
Hammitt官网:设计师手袋
2020/05/23 全球购物
C++:局部变量能否和全局变量重名
2014/03/03 面试题
入党积极分子自我鉴定
2014/02/18 职场文书
《日月潭》教学反思
2014/02/28 职场文书
社会实践活动总结报告
2014/04/29 职场文书
Python基础之元组与文件知识总结
2021/05/19 Python