今日内容回顾
Navicat可视化软件
Navicat是可以充当很多数据库软件的客户端,最主要用于MySQL
-
需要下载
正版的需要收费,试用期14天
也可以下载破解版的,百度查询即可
-
主要功能介绍
pass
python操作MySQL
在python中操作MySQL,需要使用到专门针对MySQL的一个第三方模块
先将第三方模块下载好: pip3 install pymysql
# 导入模块
import pymysql
# 1.链接服务端
conn = pymysql.connect( # 添加几个固定的参数
host='127.0.0.1', # ip地址
port=3306, # mysql的端口号
user='root', # 用户名
password='123', # 密码
database='db123', # 需要操作的mysql库名
charset='utf8mb4', # 指定字符编码
autocommit=True, ) # 执行增、删、改操作自动执行conn.commit
# 2.产生一个游标对象(等待输入命令)
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
# 3.编写SQL语句
sql1 = 'select * from teacher'
# 4.发送给服务端
cursor.execute(sql1)
# 5.获取命令的执行结果
res= cursor.fetchall()
print(res)
二次确认
# 导入模块
import pymysql
# 1.链接服务端
conn = pymysql.connect( # 添加几个固定的参数
host='127.0.0.1', # ip地址
port=3306, # mysql的端口号
user='root', # 用户名
password='123', # 密码
database='db123', # 需要操作的mysql库名
charset='utf8mb4', # 指定字符编码
autocommit=True, ) # 执行增、删、改操作自动执行conn.commit
# 2.产生一个游标对象(等待输入命令)
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
# 3.编写SQL语句
sql1 = "insert into teacher(id,teacher_name,) values(10,'tom')"
# 4.发送给服务端,其还会返回一个结果
res = cursor.execute(sql1)
print(res) # 该方法的返回值,意思是执行SQL语句表中受影响的行数。
# 5.针对改动数据库 需要加上commit操作不然无法改动
conn.commit()
"""
在针对需要对数据库中的数据进行改动的时候会有个二次确认的机制
如果想要增、删、改、操作数据库 需要二次确认是否操作
在下方添加一行代码:conn.commit 表示确认
由于每次操作都需要添加commit太过麻烦
可以在链接服务端的时候设置好固定参数配置 在里面加上 autocommit=True
"""
获取结果注意事项
cursor.fetchone() # 获取结果集中一条数据
cursor.fetchall() # 获取结果集中所有数据
cursor.fetchmany() # 获取结果集中指定条的数据
'''类似于文件光标的概念'''
cursor.scroll(2, mode='relative') # 基于当前位置往后移动
cursor.scroll(0, mode='absolute') # 基于数据集开头的位置往后移动
SQL注入问题
前戏
只需要用户名即可登录
不需要用户名和密码也能登录
问题
SQL注入
select * from userinfo where name='jason' -- haha' and pwd=''
select * from userinfo where name='xyz' or 1=1 -- heihei' and pwd=''
本质
利用一些特殊符号的组合产生了特殊的含义从而逃脱了正常的业务逻辑
措施
针对用户输入的数据不要自己处理 交给专门的方法自动过滤
sql = "select * from userinfo where name=%s and pwd=%s"
cursor.execute(sql, (username, password)) # 自动识别%s 并自动过滤各种符合 最后合并数据
补充
cursor.executemany()
小知识补充点
1.as语法
给字段起别名、起表名
2.comment语法
给表、字段添加注释信息
create table server(id int) comment '这个server意思是服务器表'
create table t1(
id int comment '用户编号',
name varchar(16) comment '用户名'
) comment '用户表';
"""
查看注释的地方
show create table
use information_schema
"""
3.concat、concat_ws语法
concat用于分组之前多个字段数据的拼接
concat_ws如果有多个字段 并且分隔符一致 可以使用该方法减少代码
4.exists语法
select * from userinfo where exists (select * from department where id<100)
exists后面的sql语句如果有结果那么执行前面的sql语句
如果没有结果则不执行
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本