首页 技术 正文
技术 2022年11月7日
0 收藏 739 点赞 539 浏览 3096 个字

python中pymysql模块常用方法以及其使用

首先我们知道pymysql 是python中操作数据库的模块

使用步骤分为如下几步:

​1.与数据库服务器建立链接 conn=pymysql.Connect(….)

​2.获取游标对象(用于发送和接受数据)cursor=conn.cursor()

​3.使用游标执行sql语句cursor.excute(sql)–>此时返回的是执行该语句后数据库表中受影响的数据条数

​4.使用fetch方法来获取执行的结果

​5.关闭连接:先关闭游标,再关闭连接

id caption
1 三年级二班
2 三年级三班
3 一年级二班
4 二年级九班

简单使用之数据库读取

import pymysqlconn = pymysql.connect(
host='127.0.0.1',
port=3306,
user='root',
password='root',
database='day41',
charset='utf8'
)
cursor = conn.cursor(pymysql.cursors.DictCursor) # 将查询结果做成字典格式
res = cursor.execute('select * from class') # 返回的值是受影响数据的条数
print(res) # 查询到的数据总条数
print(cursor.fetchone()) # 获取一条查询结果# cursor.scroll(1, 'absolute') # 绝对移动:相对于文件起始位置,向后移动一组数据
# cursor.scroll(1,'relative') # 相对移动,相对于当前位置,向后移动一个位置
cursor.scroll(-1) # 游标 相对移动到当前位置的前一条数据位置
# 获取所有剩余的内容查询的内容的字典 --》类似于文件读写的游标
print(cursor.fetchall()) # [{'cid': 2, 'caption': '三年三班'}, {'cid': 3, 'caption': '一年二班'}, {'cid': 4, 'caption': '二年九班'}]
cursor.close() # 关闭游标
conn.close() # 关闭连接

简单使用之数据库的增改删操作

​上面所示的是我们在python中pymysql的最简单的用法,在实际中,我们在对数据库的读取操作的时候,是不需要进行commit提交处理的,但是在对表的增和改操作的时候,数据库默认是启用事务的,sql语句如果没有提交相当于没有执行。

id name password money
1 qzk 123 1000
2 qby 123 1000
3 qwe 123 1000
4 zdc 123 1000
5 qqq 123 1000
# -*- coding: utf-8 -*-
import pymysql# Connect 类 实例化一个 conn连接对象
conn = pymysql.Connect(
host='127.0.0.1',
user='root',
port=3306,
password='root',
database='day41',
charset='utf8'
)
# 获取游标对象
cursor = conn.cursor(pymysql.cursors.DictCursor)
# 这里演示一下 rollback()作用:当有两个或多个操作因其他原因只完成部分操作而未能执行完全部操作导致的数据不安全问题,可以对表数据中的增改进行撤销处理。
try:
res1 = cursor.execute("update userinfo set money = money-50 where name= 'qqq'")
print(cursor.fetchall())
res = cursor.execute("update userinfo set money =money-50 where name= 'ewr'")
if not res: # 该处演示当 res 返回值为0时,表示该操作未对数据库产生影响,因为ewr不在数据库中,所以返回0,此事上一句操作 res1 已操作完毕,用户账户余额已减去50 ,故,需要撤销上面的操作,所以用 rollback()
print('转账失败')
conn.rollback()
except:
conn.rollback()
cursor.execute("select * from userinfo") # 执行语句查看数据库的userinfo所有字段信息,返回收影响的数据条数
print(cursor.fetchall()) # 查看到上面语句执行的结果
# 提交修改 因为pymysql模式默认是启用事务的,sql语句如果没提交相当于没执行
conn.commit() # 提交事务"""
注意:pymysql 默认不提交修改的,但是这里指的是对表中的记录操作不提交,像诸如删库、删表的操作时无法撤销的
"""

链接数据库的用户登录简单实现

# -*- coding: utf-8 -*-
import pymysql# 创建连接得到一个连接对象
conn = pymysql.Connect(
host='127.0.0.1', # 数据库服务器主机地址
port=3306, # 端口号,可选
user='root', # 数据库用户名
password='root', # 数据库密码
database='day41', # 数据库名称
charset='utf8' # 编码
)while True:
name_inp = input('>>>username:').strip()
pwd_inp = input('>>>>pwd:').strip()
# 获取游标对象
cursor = conn.cursor(pymysql.cursors.DictCursor)
sql = 'select * from userinfo where name=%s and password=%s'
# cursor 执行sql
res = cursor.execute(sql, (name_inp, pwd_inp))
print(res)
# sql注入
if res:
print('登录成功')
print(cursor.fetchone()) # 查询一个
break
else:
print('登录失败,用户名或密码错误')
# 关闭游标
cursor.close()
# 关闭连接
conn.close()
"""
一般我们不要自己手动拼接(关键参数)查询条件(会导致sql注入)
"""

sql注入问题

# 不要手动去拼接查询的sql语句
username = input(">>>:").strip()
password = input(">>>:").strip()
sql = "select * from user where username='%s' and password='%s'"%(username,password)# 用户名正确
username >>>: jason' -- jjsakfjjdkjjkjs
# 用户名密码都不对的情况
username >>>: xxx' or 1=1 --asdjkdklqwjdjkjasdljad
password >>>: ''

增删改

# 增
sql = "insert into user(username,password) values(%s,%s)"
rows = cursor.excute(sql,('jason','123'))# 修改
sql = "update user set username='qzksdb' where id=1"
rows = cursor.excute(sql)"""
增和改单单执行excute并不会真正影响到数据,需要再执行conn.commit()才可以完成真正的增改
"""# 一次插入多行记录
res = cursor,excutemany(sql,[(),(),()]
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,489
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,904
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,737
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,490
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,128
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,291