06pymysql

【一】pymysql
1.我们可以利用pymysql在python中操作数据库
原理是pyMySQL-->是封装好的执行subprocess链接数据库执行数据库命令的模块
官网:https://zetcode.com/python/pymysql/
【二】使用示例
import pymysql
from pymysql.cursors import DictCursor
​
# 1.链接服务端
conn=pymysql.connect(
    host='127.0.0.1',#mysql服务端地址
    port=3306,#mysql默认port端口号
    user='root',#统一写root
    passwd='llh011223',#密码
    database='school',#数据库
    charset='utf8'#字符编码,千万不要多加杠,会报错
)
#2.产生获取命令的游标对象
cursor = conn.cursor(DictCursor)#括号内不加参数,则是元组 不够精确 添加参数变成字典
# 3.编写sql语句
sql='select * from student;'
# 4.执行sql语句
cursor.execute(sql)
# 5.获取结果
res=cursor.fetchall()
print(res)
【三】大部分参数介绍
user=用户名---》写root就行
password=密码,
host=IP 本地 127.0.0.1 / localhost,
database= 需要连接到哪个数据库,
port=端口,--》mysql3306
charset=编码集,utf8
# sql_mode=严格模式,
cursorclass=Cursor 获取查询集的显示结果样式,--->写DictCursor,结果默认字典了
connect_timeout=10,
autocommit=False 自动执行提交,
passwd=输入密码,  password---》缩写
db=需要连接到哪个数据库---》database缩写
【四】获取结果各种方法
(1)cursor.fetchall()-->获取全部结果
没有指定显示结果样式的时候的结果是元组
((1, 'Jack', '100'), (2, 'Lucy', '100'), (3, 'Lily', '100'))
指定了DictCursor-->列表套字典
[{'sno': 1, 'sname': 'Jack', 'classno': '100'}, {'sno': 2, 'sname': 'Lucy', 'classno': '100'}]
(2)cursor.fetchone()-->获取一条结果
    就是一个字典--》一条信息数据
(3)cursor.fetchmany(size=指定条数)--》获取指定数量的结果 
(4)scroll--》
    cursor.scroll(1, 'relative')  # 相对于当前位置往后移动一个单位
    cursor.scroll(1, 'absolute')  # 相对于起始位置往后移动一个单位 
【五】原生操作的使用增删改查
(1)插
【1】方式一:直接写原生的SQL语句
sql = 'insert into user(username,password) values("dream","123456")'
指定 SQL 语句
cursor.execute(sql)
​
【2】方式二:格式化传入参数
%s 位置站位--->最常使用
 sql = 'insert into user(username,password) VALUES(%s, %s)'
execute 执行SQL语句传入数据的时候按照位置进行传入数据
cursor.execute(sql, ['opp', '123456'])
cursor.execute(sql, ('opp', '123456'))
​
【3】方式三:关键字传入参数
sql = 'insert into user(username,password) VALUES(%(name)s, %(pwd)s)'
cursor.execute(sql, {'name': "ppp", 'pwd': "123456"})
【4】批量插入数据
(1)方案一:遍历每一个数据然后插入数据
'''
name_list = [i for i in 'dream']
password_list = [str(i) for i in range(5)]
data_all = list(zip(name_list, password_list))
#[('d', '0'), ('r', '1'), ('e', '2'), ('a', '3'), ('m', '4')]
sql = 'insert into user(username,password) VALUES(%s, %s)'
for data in data_all:
    cursor.execute(sql, data)
'''
# (2)方案2 : 一次性批量插入数据
name_list = [i for i in 'dream']
password_list = [str(i) for i in range(5)]
data_all = list(zip(name_list, password_list))
sql = 'insert into user(username,password) VALUES(%s, %s)'
cursor.executemany(sql, data_all)
# 生效就需要提交事务
conn.commit()
​
# (3)方案3 : 一次性批量插入数据
        sql = 'insert into userinfo(name,password) values(%s,%s)'
        cursor.executemany(sql,[('tom',123),('lavin',321),('pony',333)])
(2)删
【1】直接写SQL语句
 sql = 'delete from user where id =2;'
cursor.execute(sql)
【2】站位
sql = 'delete from user where id =%s;'
cursor.execute(sql,[3])
​
【3】关键字站位
sql = 'delete from user where id =%(id)s;'
cursor.execute(sql, {'id': 4})
(3)改
【1】直接写
sql = 'update user set password="666" where id=5'
cursor.execute(sql)
【2】站位
sql = 'update user set password=%s where id=%s'
cursor.execute(sql,['999',5])
【3】关键字站位
sql = 'update user set password=%(new_password)s where id=%(id)s'
cursor.execute(sql, {'new_password': '<PASSWORD>', 'id': 5})
(4)查
【1】直接写
sql='select * from user where name="llh";'
【2】站位
sql='select * from user where name=%s;'
cursor.execute(sql,('llh'))
【3】关键字站位
sql='select * from user where name=%(name)s;'
cursor.execute(sql,{'name':'llh'})
【六】SQL注入问题
【一】问题 : 不用正确的密码即可登录成功
# 用户名和密码都不需要也可以登录
(1)输入带注释
SELECT * FROM users WHERE username = '' OR '1'='1' -- ' AND password = '$password';
因为在SQL中注释语法都是 注释标志 -- + 一个或多个空格
(2)将筛选条件变为 1
	
【二】SQL注入的解决办法
    # 使用官方提供并建议的传值方式进行传值
    # %s
    # %(name)s
  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/781312.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

apk反编译修改教程系列-----修改apk 解除软件限制功能 实例操作步骤解析_3【二十二】

在前面的几期博文中有过解析去除apk中功能权限的反编译步骤。另外在以往博文中也列举了修改apk中选项功能权限的操作方法。今天以另外一款apk作为演示修改反编译去除软件功能限制的步骤。兴趣的友友可以参考其中的修改过程。 课程的目的是了解apk中各个文件的具体作用以及简单…

JavaWeb—Servlet

概述 Javaweb的核心就是围绕servlet Servlet就是一个接口&#xff0c; 定义了java类 被浏览器访问到&#xff08;tomcat识别&#xff09;的接口 将来就是自己写一个类 &#xff0c;实现servlet接口 &#xff0c;重写方法 执行过程 当服务器接收到客户端浏览器的请求后&#xff…

【机器学习】机器学习与时间序列分析的融合应用与性能优化新探索

文章目录 引言第一章&#xff1a;机器学习在时间序列分析中的应用1.1 数据预处理1.1.1 数据清洗1.1.2 数据归一化1.1.3 数据增强 1.2 模型选择1.2.1 自回归模型1.2.2 移动平均模型1.2.3 长短期记忆网络1.2.4 卷积神经网络 1.3 模型训练1.3.1 梯度下降1.3.2 随机梯度下降1.3.3 A…

C# 编程中互斥锁的使用

C# 中的互斥锁 互斥锁是 C# 中使用的同步原语&#xff0c;用于控制多个线程或进程对共享资源的访问。其目的是确保在任何给定时间只有一个线程或进程可以获取互斥锁&#xff0c;从而提供互斥。 C# 中互斥锁的优点 可以使用互斥锁 (Mutex) 并享受其带来的好处。 1. 共享资源…

一篇就够了,为你答疑解惑:锂电池一阶模型-在线参数辨识(附代码)

锂电池一阶模型-在线参数辨识 背景在线 VS 离线 参数辨识递推最小二乘法一阶戴维南Z域离散表达式 背景 锂电池一阶戴维南等效模型的基础知识和离线辨识方法&#xff0c;已经在上一期非常详细地讲解了一轮&#xff08;上期文章请戳此处&#xff09;&#xff0c;本期继续讲解一下…

秋招提前批面试经验分享(上)

⭐️感谢点开文章&#x1f44b;&#xff0c;欢迎来到我的微信公众号&#xff01;我是恒心&#x1f60a; 一位热爱技术分享的博主。如果觉得本文能帮到您&#xff0c;劳烦点个赞、在看支持一下哈&#x1f44d;&#xff01; ⭐️我叫恒心&#xff0c;一名喜欢书写博客的研究生在读…

vue3中使用EasyPlayer播放h265视频流

1、下载EasyPlayer 5.0.3版本 在package.json中加入EasyPlayer&#xff0c;并全局install下 "dependencies": {"easydarwin/easyplayer": "^5.0.3" }2、找到node_modules中的EasyPlayer.wasm和EasyPlayer-element.min.js 3、复制到public下面&…

多元微分学中可微、连续、存在问题

一、偏导存在 与一元证明相同&#xff0c;利用偏导定义式&#xff0c;证明偏导数左右极限存在且相同。 二、偏导连续 与一元证明相同&#xff0c;证明 三、极限存在 1、找一条路径&#xff0c;一般地找 y kx 2、代入f(x,y)&#xff0c;得f(x,kx) 3、证明f(x,kx)极限存在 注意&…

基于java语言+ Vue+ElementUI+ MySQL8.0.36数字化产科管理平台源码,妇幼信息化整体解决方案

基于java语言 VueElementUI MySQL8.0.36数字化产科管理平台源码&#xff0c;妇幼信息化整体解决方案 数字化产科管理平台是为医院产科量身定制的信息管理系统。它管理了孕妇从怀孕开始到生产结束42天一系列医院保健服务信息。该系统由门诊系统、住院系统、数据统计模块三部分组…

昇思25天学习打卡营第14天|Pix2Pix实现图像转换

Pix2Pix是基于条件生成对抗网络&#xff08;cGAN, Condition Generative Adversarial Networks &#xff09;实现的一种深度学习图像转换模型&#xff0c;该模型是由Phillip Isola等作者在2017年CVPR上提出的&#xff0c;可以实现语义/标签到真实图片、灰度图到彩色图、航空图到…

MSPM0G3507——滴答定时器和普通定时

滴答定时器定时&#xff1a;&#xff08;放在主函数即可&#xff09; volatile unsigned int delay_times 0;//搭配滴答定时器实现的精确ms延时 void delay_ms(unsigned int ms) {delay_times ms;while( delay_times ! 0 ); } //滴答定时器中断 void SysTick_Handler(…

桌面快充插线板+伸缩数据线,轻松实现1+1>2

手机、平板、笔记本等电子设备已成为我们日常工作和学习的必备工具。然而,随着设备数量的增加,充电问题也日益凸显。桌面空间有限,多个快充头不仅显得杂乱无章,而且效率低下,无法满足我们高效办公的需求。 在这样的背景下,倍思Nomos氮化镓100W桌面充电站凭借其创新的设计和强大…

下载,连接mysql数据库驱动(最详细)

前言 本篇博客&#xff0c;我讲讲如何连接数据库&#xff1f;我使用mysql数据库举例。 目录 下载对应的数据库jar 包 百度网盘 存有8.4.0版本压缩包&#xff1a;链接&#xff1a;https://pan.baidu.com/s/13uZtXRmuewHRbXaaCU0Xsw?pwduipy 提取码&#xff1a;uipy 复制这…

Day05-04-持续集成总结

Day05-04-持续集成总结 1. 持续集成2. 代码上线目标项目 1. 持续集成 git 基本使用, 拉取代码,上传代码,分支操作,tag标签 gitlab 用户 用户组 项目 , 备份,https,优化. jenkins 工具平台,运维核心, 自由风格工程,maven风格项目,流水线项目, 流水线(pipeline) mavenpom.xmlta…

基于SpringBoot的时间管理系统

你好&#xff0c;我是专注于时间管理的技术爱好者&#xff01;如果你对时间管理有独到的见解&#xff0c;欢迎私信交流。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot框架 工具&#xff1a;Eclipse、MySQL数据库管理工具 系统展示 首页…

【C语言】 —— 编译和链接

【C语言】 —— 编译和链接 一、编译环境和运行环境二、翻译环境2.1、 预处理2.2、 编译&#xff08;1&#xff09;词法分析&#xff08;2&#xff09;语法分析&#xff08;3&#xff09;语义分析 2.3、 汇编2.4、链接 三、运行环境 一、编译环境和运行环境 平时我们说写 C语言…

区块链论文速读A会-ISSTA 2023(2/2)如何检测DeFi协议中的价格操纵漏洞

Conference&#xff1a;ACM SIGSOFT International Symposium on Software Testing and Analysis (ISSTA) CCF level&#xff1a;CCF A Categories&#xff1a;Software Engineering/System Software/Programming Languages Year&#xff1a;2023 第1~5篇区块链文章 请点击此…

2-5 softmax 回归的简洁实现

我们发现通过深度学习框架的高级API能够使实现线性回归变得更加容易。 同样&#xff0c;通过深度学习框架的高级API也能更方便地实现softmax回归模型。 本节如在上节中一样&#xff0c; 继续使用Fashion-MNIST数据集&#xff0c;并保持批量大小为256。 import torch from torc…

论文复现-基于决策树算法构建银行贷款审批预测模型(金融风控场景)

作者Toby&#xff0c;来源公众号&#xff1a;Python风控模型&#xff0c;基于决策树算法构建银行贷款审批预测模型 目录 1.金融风控论文复现 2.项目背景介绍 3.决策树介绍 4.数据集介绍 5.合规风险提醒 6.技术工具 7.实验过程 7.1导入数据 7.2数据预处理 7.3数据可…

隔离级别-隔离级别中的锁协议、隔离级别类型、隔离级别的设置、隔离级别应用

一、引言 1、DBMS除了采用严格的两阶段封锁协议来保证并发事务的可串行化&#xff0c;实现事务的隔离性&#xff0c;也可允许用户选择一个可以保证应用程序正确执行并且能够使并发度最大的隔离性等级 2、通常用隔离级别来描述隔离性等级&#xff0c;以下将主要介绍ANSI 92标准…