mysql复习1->pymysql相关

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()
    
pymysql 连接数据库

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()
SQL注入

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()

 

posted @ 2019-02-14 19:12  yyf1  阅读(166)  评论(0编辑  收藏  举报