Python pymsql模块的使用

所属分类: 脚本专栏 / python 阅读数: 1595
收藏 0 赞 0 分享

基本使用

首先要下载 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 pymsql的资料请关注脚本之家其它相关文章!

更多精彩内容其他人还在看

Python简单操作sqlite3的方法示例

这篇文章主要介绍了Python简单操作sqlite3的方法,结合实例形式分析了Python针对sqlite3数据库的读取、创建、增删改查等基本操作技巧,需要的朋友可以参考下
收藏 0 赞 0 分享

Python实现遍历目录的方法【测试可用】

这篇文章主要介绍了Python实现遍历目录的方法,涉及Python针对目录与文件的遍历、判断、读取相关操作技巧,需要的朋友可以参考下
收藏 0 赞 0 分享

python条件变量之生产者与消费者操作实例分析

这篇文章主要介绍了python条件变量之生产者与消费者操作,结合具体实例形式分析了Python条件变量的概念、原理、及线程操作的相关技巧,需要的朋友可以参考下
收藏 0 赞 0 分享

利用pyinstaller或virtualenv将python程序打包详解

这篇文章主要给大家介绍了利用pyinstaller将python程序打包的相关资料,文中介绍的非常详细,相信对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。
收藏 0 赞 0 分享

Python多线程经典问题之乘客做公交车算法实例

这篇文章主要介绍了Python多线程经典问题之乘客做公交车算法,简单描述了乘客坐公交车问题并结合实例形式分析了Python多线程实现乘客坐公交车算法的相关技巧,需要的朋友可以参考下
收藏 0 赞 0 分享

Python编程实现删除VC临时文件及Debug目录的方法

这篇文章主要介绍了Python编程实现删除VC临时文件及Debug目录的方法,涉及Python针对文件与目录的遍历、删除等相关操作技巧,需要的朋友可以参考下
收藏 0 赞 0 分享

python3中dict(字典)的使用方法示例

这篇文章主要介绍了python3中dict(字典)的使用方法,文中给出了详细的功能列举,对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。
收藏 0 赞 0 分享

Python中.py文件打包成exe可执行文件详解

这篇文章主要给大家介绍了在Python中.py文件打包成exe可执行文件的相关资料,文中介绍的非常详细,相信对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。
收藏 0 赞 0 分享

Python编程之event对象的用法实例分析

这篇文章主要介绍了Python编程之event对象的用法,结合实例形式分析了event对象在线程通信中的作用与使用方法,需要的朋友可以参考下
收藏 0 赞 0 分享

Python爬取网页中的图片(搜狗图片)详解

没想到python是如此强大,令人着迷,以前看见图片总是一张一张复制粘贴,现在好了,学会python就可以用程序将一张张图片,保存下来。下面这篇文章主要给大家介绍了利用Python3.6爬取搜狗图片网页中图片的相关资料,需要的朋友可以参考下。
收藏 0 赞 0 分享
查看更多