Pycharm访问MySQL数据库·上

1.MySQL驱动模块Connector

python 复制代码
#导入数据库的驱动工具
import mysql.connector
#连接数据库必备的条件
config = {
    "host": "localhost",
    "port": 3306,
    "user": "root",
    "password": "888888",
    "database": "demo"
}
#创建连接项(管道)
conn = mysql.connector.connect(**config)
#创建游标(结果集)
cursor = conn.cursor()
#准备sql
sql = "select * from t_emp where sal > %s and deptno = %s"
#执行sql
#参数1:执行的sql 参数2:传入的参数,位置对应
cursor.execute(sql,(2000,10))
#获得数据
temp = cursor.fetchall()
print(temp)
#关闭游标
cursor.close()

2.SQL注入攻击案例

2.1 演示sql注入

python 复制代码
import mysql.connector
config = {
    "host": "localhost",
    "port": 3306,
    "user": "root",
    "password": "888888",
    "database": "demo"
}
conn = mysql.connector.connect(**config)
#合成数据
username = "1 OR 1=1"
password = "1 OR 1=1"
#演示sql注入
sql = ("select count(*) from t_user where username="+username+
       " AND password="+password)
cursor = conn.cursor()
cursor.execute(sql)
#查询的结果为1行1列,使用fetchone只获得第一行的数据,[0]只获得第一个格子里的数据
temp = cursor.fetchone()[0]
print(temp)
cursor.close()

2.2 屏蔽sql注入

python 复制代码
import mysql.connector
config = {
    "host": "localhost",
    "port": 3306,
    "user": "root",
    "password": "888888",
    "database": "demo"
}
conn = mysql.connector.connect(**config)
#合成数据
username = "1 OR 1=1"
password = "1 OR 1=1"
#屏蔽sql注入
sql = "select count(*) from t_user where username = %s and password=%s"
cursor = conn.cursor()
#sql后拼接'%'为变量替换,易触发sql注入
#sql后拼接','为占位符,可屏蔽sql注入
cursor.execute(sql, (username, password))
temp = cursor.fetchone()[0]
print(temp)
cursor.close()

3.MySQLConnector的异常处理

python 复制代码
import mysql.connector
try: # 程序正常执行的区域
    config = {
        "host": "localhost",
        "port": 3306,
        "user": "root",
        "password": "888888",
        "database": "demo"
    }
    conn = mysql.connector.connect(**config)
    #开启事务控制
    conn.start_transaction()
    cursor = conn.cursor()
    sql = "update t_user set username=%s where id=%s"
    cursor.execute(sql, ("wagaga",1))
    sql = "insert into t_emp values (%s,%s,%s,%s,%s,%s,%s,%s)"
    cursor.execute(sql, (9528,'ZOYA','CLERK',7782,'1980-10-17',1300.00,100,10))
    conn.commit()
except Exception as e: #程序触发异常后执行的区域
    print("触发异常")
    if "conn" in dir():
        conn.rollback()# 如果触发异常则回滚
finally: # 无论程序是否正常执行,都会执行的区域,通常用于关闭连接
    if "conn" in dir():# 查询是否有conn地址
        conn.close()# 如果有,则关闭
相关推荐
那个村的李富贵2 分钟前
解锁CANN仓库核心能力:50行代码搭建国产化AIGC图片风格迁移神器
mysql·信息可视化·aigc·cann
小Tomkk2 分钟前
数据库 变更和版本控制管理工具 --Bytebase 安装部署(linux 安装篇)
linux·运维·数据库·ci/cd·bytebase
qq_124987075327 分钟前
基于JavaWeb的大学生房屋租赁系统(源码+论文+部署+安装)
java·数据库·人工智能·spring boot·计算机视觉·毕业设计·计算机毕业设计
倒流时光三十年1 小时前
SpringBoot 数据库同步 Elasticsearch 性能优化
数据库·spring boot·elasticsearch
码农小卡拉1 小时前
深入解析Spring Boot文件加载顺序与加载方式
java·数据库·spring boot
怣501 小时前
MySQL多表连接:全外连接、交叉连接与结果集合并详解
数据库·sql
wjhx2 小时前
QT中对蓝牙权限的申请,整理一下
java·数据库·qt
冰暮流星2 小时前
javascript之二重循环练习
开发语言·javascript·数据库
万岳科技系统开发2 小时前
食堂采购系统源码库存扣减算法与并发控制实现详解
java·前端·数据库·算法
冉冰学姐3 小时前
SSM智慧社区管理系统jby69(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·管理系统·智慧社区·ssm 框架