pymysql模块

pymysql是用python控制终端对MySQL数据库进行操作的第三方模块

import pymysql
# 1.连接数据库
client = pymysql.connect(
# 地址
host='127.0.0.1',
# 数据库端口
port=3306,
# 用户名,要加引号
user='root',
# 密码,要加引号
password='',
# 文件夹
database='db2',
# 设置字符编码不能写成了utf-8
charset='utf8',
# 设置自动提交命令,如不设置则无法提交命令进行增,改,删操作
autocommit=True
) # 2.获取游标对象 ——————》可以通过游标来提交SQL命令,
# cursor_obj = client.cursor() 以元组形式返回
# pymysql.cursors.DictCursor 将查询出来的结果制作成字典形式返回
cursor_obj = client.cursor(pymysql.cursors.DictCursor) # 3.通过execute提交SQL语句
# SQL语句要用引号,不要加 ; 号
sql = 'select * from emp'
# 提交SQL语句
cursor_obj.execute(sql) # 4.提交后,通过cursor_obj.fetchall()获取查询游标后的全部的结果
res = cursor_obj.fetchone() # 只获取游标后的一条结果
res = cursor_obj.fetchall() # 获取查询游标后的全部的结果
res = cursor_obj.fetchmany(3) # 指定获取游标后的几条数据,可以超过不会报错
# 获取的是列表套字典
# print(res)
for dic in res:
print(dic) # 5.关闭游标
cursor_obj.close() # 6.关闭客户端连接
client.close()

游标的相对移动和绝对移动

print(cursor_obj.fetchone())    #获取一个结果
print(cursor_obj.fetchone())
print(cursor_obj.fetchall()) #获取所有结果
# print(cursor.fetchmany(2)) # 指定获取几条数据 如果数字超了也不会报错 >>>{'id': 1, 'name': 'Mr沈', 'sex': 'male', 'age': 17}
{'id': 2, 'name': 'tate', 'sex': 'male', 'age': 18}
[{'id': 3, 'name': 'ank', 'sex': 'male', 'age': 18},{'id': 4, 'name': 'vicky', 'sex': 'female', 'age': 18}]

如果想控制游标的移动位置来获取结果可以用相对移动或绝对移动

相对移动:cursor.scroll(2, 'relative')  # 基于指针所在的位置往后偏移两位,下次获取就获取指针后的数据
绝对移动:cursor.scroll(1, 'absolute') #基于起始位置往后偏移1位

SQL注入问题

SQL注入问题:利用特殊符号和注释语法,巧妙的绕过真正的SQL校验

解决方法:关键性的数据校验,不要手动拼接,execute会自带拼接功能,可以解决这个问题

import pymysql
client = pymysql.connect(
host='127.0.0.1',
port=3306,
database='day36',
user='root',
password='',
charset='utf8',
autocommit=True
)
cursor_obj = client.cursor(pymysql.cursors.DictCursor)
username = input('请输入用户名').strip()
password = input('请输入密码:').strip()
# sql = 'select * from db where username="%s" and password="%s"'%(username,password) # 此处%s必须要加引号
sql = 'select * from db where username="%s" and password="%s"' # 此处%s可以不用加引号
print(sql)
res = cursor_obj.execute(sql,(username,password)) # 自带拼接功能将execute后的参数与SQL一一对应传入,只能替换%占位符
if res:
print(res) # 显示所有操作的数据条数
else:
print('用户名或密码错误') #请输入用户名wqjed" or 2=2 -- wqjdkef
# 请输入密码:
# select * from db where username="wqjed" or 2=2 -- wqjdkef" and password=""
# # 请输入用户名shen" -- weiqfewq
# 请输入密码:
# select * from db where username="shen" -- weiqfewq" and password=""
#

数据的增删改查

import pymysql

# 连接数据库函数
def client_mysql():
client = pymysql.connect(
host='127.0.0.1',
port=3306, # 端口号不能加引号
user='root',
password='',
database='db2',
charset='utf8',
autocommit=True
)
cursor_obj = client.cursor(pymysql.cursors.DictCursor)
return cursor_obj, client # 关闭数据库函数
def close_client():
cursor_obj, client = client_mysql()
cursor_obj.close()
client.close() cursor_obj, client = client_mysql()
# 插入数据
# 插入表格
sql = 'create table user(id int primary key,name varchar(20))'
cursor_obj.execute(sql)
# 插入数据
s = 'insert into user(id,name) values(7,"vicky")'
cursor_obj.execute(s) # 查看数据
res = 'select * from user'
cursor_obj.execute(res)
res = cursor_obj.fetchall()
print(res) # 更新数据
try:
sql = 'update user set name="shen" where id=7'
cursor_obj.execute(sql)
except Exception as e:
print(e)
res = 'select * from user'
# 查看更新后的数据
cursor_obj.execute(res)
res = cursor_obj.fetchall()
print(res) # 删除数据
sql = 'delete from user'
cursor_obj.execute(sql)
# 查看更新后的数据
res = 'select * from user'
cursor_obj.execute(res)
res = cursor_obj.fetchall()
print(res)
# 关闭连接
close_client()

最新文章

  1. Hibernate中的锁机制
  2. SSISDB7:查看当前正在运行的Package
  3. QQ等级表
  4. 关于ssh调用远程后台命令挂住的解释
  5. Java Gradle入门指南之gretty插件(安装、命令与核心特性)
  6. Apache2.4.6 添加虚拟主机
  7. BZOJ 3170 松鼠聚会(XY坐标)
  8. iOS应用架构浅谈
  9. 自定义 select 下拉菜单
  10. Project 1 :创建链表与显示链表
  11. 【Alpha】 第七次Daily Scrum Meeting
  12. 为Android添加JNI支持
  13. 解决安装虚拟环境出现的问题(OSError: Command /home/python/.virtua...ngo3_web/bin/python3 - setuptools pkg_resources pip wheel failed with error code 2)
  14. 几种归一化方法的概念及python实现
  15. 移动端Tap与滑屏实战技巧总结以及Vue混合开发自定义指令
  16. SVN创建分支主干策略
  17. 死磕!Windows下Apache+PHP+phpmyadmin的配置
  18. 判断当前应用程序处于前台还是后台 ANDROID
  19. 微信开放平台Android应用的签名
  20. js 日期,时间函数 及相关运算大全

热门文章

  1. Python高级特性——迭代器
  2. 8道Python基础面试练习题
  3. 阿里iconfont的使用
  4. create connection SQLException, url: jdbc:mysql://localhost:3306/demo, errorCode 1045, state 28000
  5. 升鲜宝V2.0_杭州生鲜配送行业,升鲜宝供应链B端订货系统使用说明_升鲜宝生鲜供应链管理系统_15382353715_余东升
  6. vue项目、路由
  7. 第420期 Python 周刊
  8. LeetCode 652: 寻找重复的子树 Find Duplicate Subtrees
  9. Spring 框架基础(01):核心组件总结,基础环境搭建
  10. SpringCloud微服务(04):Turbine组件,实现微服务集群监控