10月30日学习内容整理:pymysql模块补充
1、sql注入:
》》以用户登录为例,利用mysql中--两个横杠注释的功能,可以在输入用户名的时候在后面加上--这样就将密码隐藏甚至加上其它逻辑运算使得用户名也可以被隐藏,这样就导致数据库很容易就被破解。
》》像这样改变查询逻辑的做法就是sql注入
》》为了规避这种风险,我们通常使用execute函数来做字符串的拼接,不要再自己做字符串拼接,同时execute也会为我们规避掉sql注入的问题
2、拿游标:
cur=con.cursor()用连接去调用
》》括号里可以写参数:cursor=pymysql.cursors.DictCursor 意思就是结果会以字典的形式输出
3、移动游标位置
》》相对绝对位置移动:
cur.scroll(2,'absolute') 这个2就代表遍历到第2条后开始读结果
从第3条结果开始取,每次使用absolute移动都是从0开始,也就是从结果的第一条开始
》》相对当前位置移动
cur.scroll(2,'relative') 这个2就代表遍历到第2条后开始读结果
从第3条结果开始取,每次使用relative移动游标都是从当前位置开始
4、获取自增ID的最后一个字段值和最新插入的自增字段
cur.lastrowid 用游标去调用,获取自增ID的最后一个字段值
con.insert_id() 用连接去调用,获取最新插入的自增id
注意这两个方法要在commit之前用,否则只会返回0或None,最好就是插入之后就要马上查,若中间有查询操作就是None,中间最好不要有其他操作
5、调用存储过程:
游标调用
cur.callproc(存储过程名(字符串形式),(参数,)) 参数以元组形式传,不用定义
拿返回值:同样用execute函数执行查询命令
cur.execute('select @_p2_0,@_p2_1;') p2是存储过程名字,0就代表第一个参数的返回值,1就代表第二个参数的返回值,以此类推
cur.fetchone() 还是用fetchone取结果