python 操作 MySQL 即相关问题
导入pymysql
import pymysql # 创建connect()对象 conn = pymysql.connect( host = '127.0.0.1', port = 3306, user = 'root', password = 'root', database = 'db1', charset = 'utf8' ) # 产生一个游标对象 以字典的形式返回查询出来的数据,键是表的字段,值时字段对应的记录 cursor = conn.cursor(pymysql.cursors.DictCursor) # 编写sql语句,赋值给一个变量 sql = 'select * from teacher' # 执行传入的sql语句 res = cursor.execute(sql) # print(res) # res 是执行语句返回的数据条数 print(cursor.fetchone()) # fetchone只获取一条数据 {'tid': 1, 'tname': '张磊老师'} print(cursor.fetchone()) # 只获取一条数据 {'tid': 2, 'tname': '李平老师'} 获取的是第二条数据,因为游标在移动 # 控制光标移动 cursor.scroll(1,'absolute') # absolute 绝对移动,相对起始位置,往后移动几位 cursor.scroll(1,'relative') # relative 相对移动,现对于当前光标所在位置,往后移动几位 print(cursor.fetchall()) # fetchall获取所有数据,返回的是一个列表 # [{'tid': 1, 'tname': '张磊老师'}, {'tid': 2, 'tname': '李平老师'}, # {'tid': 3, 'tname': '刘海燕老师'}, {'tid': 4, 'tname': '朱云海老师'}, # {'tid': 5, 'tname': '李杰老师'}]
增删改查
import pymysql conn = pymysql.connect( host = '127.0.0.1', port = 3306, user = 'root', password = 'root', database = 'db2', charset = 'utf8', autocommit = True # 这个参数配置后,增删改操作都不会需要手动加conn.commit了 ) cursor = conn.cursor(pymysql.cursors.DictCursor) ''' 增删改操作对于数据库来说都是敏感操作 都必须加一句 conn.commit() ''' # conn.commit() # sql = 'insert into user(id,name,password) values(3,"dazhuang","321")' # 增数据 # sql = 'update user set name = "xiaozhuang" where id = 3' # 改数据 # sql = 'delete from user where id = 3' # 删数据 # cursor.execute(sql) username = input('>>>:') pwd = input('>>>:') sql = "select * from user where name = %s and password = %s" # 查数据 print(sql) # 根据sql语句匹配用户输入的名合密码是否存在 res = cursor.execute(sql,(username,pwd)) # 能帮你自动过滤特殊符号,不免sql注入问题 # execute 能够识别%s并且自动过滤特殊符号 完成sql语句的拼接 print(res) # 若存在 返回的是数据的条数1,不存在返回的是0条数据 # 判断 res 是否有值 if res: print(cursor.fetchall()) else: print('用户名或密码错误')
sql注入问题
sql 注入问题: 就是利用注释等具有特殊意义的符号来利用mysql的漏洞 解决办法: 利用excute帮你去拼接数据 将 sql = "select * from user where name = %s and password = %s" %(username,pwd) 改为: sql = "select * from user where name = %s and password = %s" res = cursor.execute(sql,(username,pwd))
# 不要手动去拼接查询的sql语句 username = input(">>>:").strip() password = input(">>>:").strip() sql = "select * from user where username='%s' and password='%s'"%(username,password) # 用户名正确 username >>>: jason' -- jjsakfjjdkjjkjs # 用户名密码都不对的情况 username >>>: xxx' or 1=1 --asdjkdklqwjdjkjasdljad password >>>: ''