pymysql 操作 , sql注入

1,安装:

pip3 install pymysql

import pymysql

注意:
    a.文件名不能写自己本身
    b.connect ----> conn ----> cursor
    c.执行sql语句  ---> execute(sql)
    d.取数据:
        fetchone()
        fetchall()
        fetchamany(size)
    e.增加删除:
        conn.commit()

2,链接:

import  pymysql

# 连接mysql服务器
conn = pymysql.connect(host='localhost', user='root', password='123',database='db2', charset='utf8')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

sql = "select * from student where id > %s " % (12,)

cursor.execute(sql)

# res = cursor.fetchone()
res = cursor.fetchmany(10)
# res = cursor.fetchall()  ### 列表里面套字典
print(res)

cursor.close()
conn.close()

3,操作:

import  pymysql

# 连接mysql服务器

conn = pymysql.connect(host='localhost', user='root', password='123',database='db1', charset='utf8')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

sql = "delete from t7 where id=3"
cursor.execute(sql)

###  删除和更新的时候, 需要事物提交
conn.commit()


# res = cursor.fetchone()
# res = cursor.fetchmany(10)
# res = cursor.fetchall()  ### 列表里面套字典
# print(res)

cursor.close()
conn.close()

 

注意:
            
    a. conn, cursor 用完了需要关闭资源连接
            
    b. 查询的时候, fetchone, fetchmany, fetchall,  默认返回的是元组, 需要返回字典的话: cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
            
    c. 删除和更新的时候, 需要在execute之后, 添加 conn.commit()

4,sql注入

a. 登录验证
    
    写sql语句的时候, %传值的时候, 需要加引号:
        sql = "select * from t4 where name = '%s' and pwd = '%s'" % (username, pwd)
    
    上面的sql语句带来的风险是:
    
        例一:
            username = zekai' #
            
            select * from t4 where name = 'zekai' #' and pwd = ''
        
        例二:
            username = dbsahvbdsha' or 1=1 #
            
            select * from t4 where name = 'dbsahvbdsha' or 1=1 
上面出现的问题,我们称之为 SQL注入 (
**********************************) 出现问题的根源是: 因为太过于相信用户的输入, 导致我们在接受用户输入的参数的时候, 并没有对他进行转义 解决SQL注入: 1. 自己手工对用户输入的值进行转义 2. 使用execute()自动进行过滤 sql = "select * from t4 where name = %s and pwd = %s" cursor.execute(sql,(username, pwd)) #$## 插入一条 cursor.execute(sql, ('lxxx', '1234'))
### 插入多条 data = [ ('aaaaa', 'aaa'), ('bbbb', 'bbb'), ('ffff', '666'), ('rrrr', '888'), ] cursor.executemany(sql, data) try: cursor.execute(sql, ('lxxx', '1234')) ### 删除和更新的时候, 需要事物提交 conn.commit() except Exception as e: conn.rollback() cursor.lastrowid : 最后一行的行数

 

posted on 2019-06-18 16:30  Jolinhe  阅读(429)  评论(0编辑  收藏  举报