1.pymysql连接
import pymysql # 1. 建立连接 conn = pymysql.connect( host="localhost", port=3306, db='db2', user='root', password='root') # 2. 设置游标 cursor = conn.cursor(pymysql.cursors.DictCursor) # 设置游标的具体类型,DictCursor拿到字段名 # 3. 执行sql语句 sql = 'select * from emp' res = cursor.execute(sql) # 结果的行数 print(res) # 需求: 具体的一条条记录 tag = cursor.fetchone() print(tag) print(tag['salary']) tag = cursor.fetchone() print(tag) # cursor.scroll(1, mode='relative') # 指针相对于上一次位置往后偏移1条记录 cursor.scroll(res - 1, mode='absolute') # 指针绝对, 游标永远从头开始偏移 # 查询全部 tags = cursor.fetchall() print(tags) cursor.close() conn.close()
2.sql 注入
''' sql语法中 注释: /**/ | -- | # 什么是sql注入: 通过书写sql包含(注释相关的)特殊字符, 让原有的sql执行顺序发生改变, 从而改变执行得到的sql 目的: 绕过原有的sql安全认证, 达到对数据库攻击的目的 ''' import pymysql conn = pymysql.connect(host='localhost', port=3306, user='root', passwd='root', db='db2') cursor = conn.cursor(pymysql.cursors.DictCursor) # 登录 # 得到用户输入的账户密码 usr = input("请输入用户名: ") #abc pwd = input("请输入密码: ") #123 # sql注入 # 1.知道用户名: abc" -- hehe | ooo # select * from user where usr="abc" -- hehe" and pwd="ooo" # 2.不知道用户名 aaa" or 1=1 -- hehe | 000 # select * from user where usr="aaa" or 1=1 -- hehe" and pwd="000" # 处理方式 # 对输入的账户密码做完全处理 => 不可能形成达到sql注入的特殊语法 => 正则 # 和数据库的账户密码进行配对 # sql = 'select * from user where usr="%s" and pwd="%s"' % (usr, pwd) # select * from user where usr="abc" and pwd="123" # res = cursor.execute(sql) # pymysql已经处理了sql注入 sql = 'select * from user where usr=%s and pwd=%s' res = cursor.execute(sql, (usr, pwd)) # print(res) if res: print('login success') else: print('login failed') cursor.close() conn.close()
3.增删改
import pymysql conn = pymysql.connect(host='localhost', port=3306, user='root', passwd='root', db='db2') cursor = conn.cursor(pymysql.cursors.DictCursor) # 增 # sql1 = 'insert into user(usr, pwd) values (%s, %s)' # cursor执行sql语句,在内存中完成了对数据的插入, 但不能将数据存放到硬盘 # 会将id完成自增 # 插入单条 # res = cursor.execute(sql1, ("opq", "123")) # 插入多条 #res = cursor.executemany(sql1, [("aaa", "000"), ("bbb", "111")]) # print(res) # 将内存中的数据提交给硬盘, 完成真实意义上的数据存储 # conn.commit() # 删 # sql2 = 'delete from user where usr=%s' # res = cursor.execute(sql2, ("aaa")) # print(res) # conn.commit() # 改 sql3 = 'update user set pwd=%s where usr=%s' res = cursor.execute(sql3, ("222", "bbb")) conn.commit() cursor.close() conn.close()