Python pymsql模块的使用
作者:云崖先生 发布时间:2023-01-08 15:23:00
标签:Python,pymsql
基本使用
首先要下载 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()
来源:https://www.tuicool.com/articles/RN7zAzJ
0
投稿
猜你喜欢
- 本文介绍FCKeditor在Java环境下的使用方法。一、简介 功能:所见即所得,支持图片和Flash,工具栏可自由配置,使用简单兼容性:I
- 这篇文章主要介绍了python 采用paramiko 远程执行命令及报错解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的
- 前言本文通过定时调度Python的例子演示了Apache DophinScheduler 的基本操作:创建租户指定用户的租户创建Python
- tf.app.flags命令行参数解析模块说道命令行参数解析,就不得不提到 python 的 argparse 模块,详情可参考我之前的一篇
- 前言读写文件是最常见的IO操作。Python内置了读写文件的函数,用法和C是兼容的。读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都
- pytorch 中的 state_dict 是一个简单的python的字典对象,将每一层与它的对应参数建立映射关系.(如model的每一层的
- 图片按钮是我们经常应用的网页元素,按钮的生成有两种方法,一个是用链接<a>来模拟按钮,一个是用现成的表单按钮。<input
- 为什么是三谈为什么是三谈呢?一是因为这真的是一个被说烂的话题,二是因为太师傅在n年前就写过这篇再谈iframe自适应高度。之所以再提该问题,
- 变量赋值与对象赋值对比<?php // 声明一个变量并赋值 $a = 1; // 将数据类型
- meta是html语言head区的一个辅助性标签。几乎所有的网页里,我们可以看到类似下面这段的html代码:<head> <meta&nbs
- 目录为什么要画局部放大图?程序逻辑程序实例总结这项功能的目的是为了方便使用opencv做图像标注工具。为什么要画局部放大图?在做图像数据标注
- 前言如果你和我一样偶尔看看股票,看看自己关注的股票是涨了还是跌了,或者想快速获取到想看的头条新闻,我们不必把过多的注意力放在去寻找上面,我们
- 在编写自动化测试用例的时候,每次登录都需要输入验证码,后来想把让python自己识别图片里的验证码,不需要自己手动登陆,所以查了一下识别功能
- 1. 函数求一阶导import tensorflow as tftf.enable_eager_execution()tfe=tf.cont
- 本文实例为大家分享了python抖音表白程序的具体代码,供大家参考,具体内容如下import sysimport randomimport
- 本文实例讲述了Python pymongo模块常用操作。分享给大家供大家参考,具体如下:环境:pymongo3.0.3,python3以下是
- 一、问题的提出随着互连网的发展,网站的数量以惊人的数字增加。网站的作用除了给广大网友们提供信息资讯服务外,还应该成为网友们上传与下载文件的场
- 本文实例讲述了Python使用matplotlib绘图无法显示中文问题的解决方法。分享给大家供大家参考,具体如下:在python中,默认情况
- 最近使用python里的matplotlib库绘图,想在代码结束时显示图片看看,结果图片一闪而过,附上我原来代码:import matplo
- keras 模块里面为我们提供了一个预训练好的模型,也就是开箱即可使用的图像识别模型趁着国庆假期有时间我们就来看看这个预训练模型如何使用吧可