MySQL之pymysql模块
Navicat软件
我们在终端操作MySQL,既没有自动操作也无法保存,不方便开发,所以我们使用Navicat,Navicat内部封装了所有的操作数据库的命令。我们在使用它的时候只需要鼠标点击即可完成操作,无需书写SQL语句。
详细参考:Day 48 - 04 navicat基本使用_哔哩哔哩_bilibili
注释语法
在navicat中如何快速的注释和解注释 ctrl + ? 加注释 ctrl + ? 基于已经有注释的情况下再来一次就是解开注释 无果你的navicat版本不一致还有种可能是 ctrl + shift + ? 解开注释
pymysql
import pymysql conn = pymysql.connect( host='127.0.0.1', port=3306, user='root', password='111111', database='day02', charset='utf8' # 编码千万不要加- ) # 链接数据库 cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 产生一个游标对象(就是用来帮你执行命令的) """ cursor=pymysql.cursors.DictCursor将查询结果以字典的形式返回 """ sql = 'select * from emp;' res = cursor.execute(sql) # print(res) # execute返回额是你当前sql语句所影响的行数,该返回值一般不用 # 获取命令执行的查询结果 print(cursor.fetchone()) # 只拿一条 读取数据类似于光标的移动 得到数据本身 cursor.scroll(1,'relative') # 相对于光标所在的位置继续往后移动1位 cursor.scroll(1,'absolute') # 相对于数据的开头继续往后移动1位 print(cursor.fetchall()) # 拿所有 得到列表套多个数据 print(cursor.fetchmany(2)) # 可以指定拿几条
SQL注入
""" 利用一些语法的特性,书写一些特点的雨具实现固定的语法 MySQL利用的是MySQL的注释语法:select * from user_info where name ='xiao' -- iinbdfwuei' and password = '' """ 日常生活中很多软件在注册的时候都不能含有特殊符号,因为怕你构造出特定的语句入侵数据库,不安全 如何解决SQL注入? # 敏感的数据不要自己做拼接,交给execute方法帮你拼接即可 import pymysql conn = pymysql.connect( host='127.0.0.1', port=3306, user='root', password='111111', database='day45', charset='utf8' # 编码千万不要加- ) # 链接数据库 cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) username = input('>>>: ').strip() password = input('>>>: ').strip() sql = "select * from user_info where name =%s and password = %s" # 或者使用 % (username, password),下面的(username, password)就不需要加了。但是这种方法会引起SQL注入 # 不要手动拼接数据,先用%s占位,之后将需要拼接的数据直接交给execute方法即可 print(sql) rows = cursor.execute(sql,(username,password)) # 自动识别sql里面的%s用后面元组里面的数据替换 if rows: print('登陆成功') print(cursor.fetchall()) else: print('用户名密码错误')
pymysql补充
# 针对增删改,pymysql需要二次确认才能真正的操作数据 import pymysql conn = pymysql.connect( host='127.0.0.1', port=3306, user='root', password='111111', database='day45', charset='utf8', # 编码千万不要加- autocommit=True # 自动提交 ) # 链接数据库 cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 增 sql = "insert into user_info(name,password) values(%s,%s);" # 第一种 rows = cursor.execute(sql,('abc',123)) # 第二种 rows = cursor.executemany(sql,[('abb',123),('qwe',111)]) # 批量增加 print(rows) conn.commit() # 确认 # 删 sql = "delete from user_info where id=1;" rows = cursor.execute(sql) print(rows) conn.commit() # 改 sql = "update user_info set name='xiaoNB' where id=2;" rows = cursor.execute(sql) print(rows) conn.commit() # 查 sql = "select * from user_info;" rows = cursor.execute(sql) print(cursor.fetchall()) """ 增删改查中 删改查他们的操作涉及到数据的修改 需要二次确认 """ # 还可以一次性插入N多条数据 rows = cursor.executemany(sql,[('abb',123),('qwe',111)]) # 批量增加
合集:
MySQL数据库炒年糕
分类:
MySQL数据库
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理