MySQL数据库学习第十二篇pymysql模块

Posted 呆萌小河马的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL数据库学习第十二篇pymysql模块相关的知识,希望对你有一定的参考价值。

一、安装的两种方法

第一种

#安装
pip3 install pymysql

第二种

二、链接,执行sql,关闭(游标)

import pymysql
user= input(\'用户名:>>\').strip()
pwd= input(\'密码:>>\').strip()

#先链接,拿到游标
conn=pymysql.connect(host=\'localhost\',user=\'root\',password=\'123456\',
             database=\'day47\',charset=\'utf8\') cursor=conn.cursor() #拿到游标,即mysql > #执行sql sql=\'select * from user where user="%s" and password="%s";\'%(user,pwd) print(sql) #注意%s需要加双引号 rows = cursor.execute(sql) #拿到受影响的行数 cursor.close() conn.close() if rows: print(\'登录成功\') else: print(\'登录失败\')

 

三、execute()之sql注入

注意:符号--会注释掉它之后的sql,正确的语法:--后至少有一个任意字符

根本原理:就根据程序的字符串拼接name=\'%s\',我们输入一个xxx\' -- haha,用我们输入的xxx加\'在程序中拼接成一个判断条件name=\'xxx\' -- haha\'

最后那一个空格,在一条sql语句中如果遇到select *
from t1 where id > 3 -- and name=\'egon\';则--之后的条件被注释掉了 #1、sql注入之:用户存在,绕过密码 egon\' -- 任意字符 #2、sql注入之:用户不存在,绕过用户与密码 xxx\' or 1=1 -- 任意字符

 

 

 

解决注入

# 原来是我们对sql进行字符串拼接
# sql="select * from userinfo where name=\'%s\' and password=\'%s\'" %(user,pwd)
# print(sql)
# rows=cursor.execute(sql)

#改写为(execute帮我们做字符串拼接,我们无需且一定不能再为%s加引号了)
sql="select * from userinfo where name=%s
and password=%s" #!!!注意%s需要去掉引号,因为pymysql会自动为我们加上 rows=cursor.execute(sql,[user,pwd])
#pymysql模块自动帮我们解决sql注入的问题,只要我们按照pymysql的规矩来。

四、增、删、改:conn.commit()

增:

import pymysql
先链接,拿到游标
conn=pymysql.connect(host=\'localhost\',user=\'root\',password=\'123456\',database=\'day47\')
cursor=conn.cursor() #拿到游标,即mysql >
#执行sql   增:
sql=\'insert into user1(user,password) VALUES (%s,%s)\'
print(sql)
# rows = cursor.execute(sql,(\'xixi\',123))  #插入一条记录
rows = cursor.executemany(sql,[(\'xixi\',123),(\'aaa\',456),(\'ttt\',147)]) #插入多行记录
print(\'%s row in set (0.00 sec)\'%rows)

conn.commit() #提交到数据库
cursor.close()
conn.close()

删:

import pymysql
#先链接,拿到游标
name=input(\'>>\').strip()
conn=pymysql.connect(host=\'localhost\',user=\'root\',password=\'123456\',database=\'day47\')
cursor=conn.cursor() #拿到游标,即mysql >
#执行sql   删:
sql=\'delete from user1 where user =%s;\'  #删除数据
print(sql)
rows = cursor.execute(sql,(name))
print(\'%s row in set (0.00 sec)\'%rows)

conn.commit() #提交到数据库
cursor.close()
conn.close()

改:

import pymysql
#先链接,拿到游标
id=input(\'>>\').strip()
conn=pymysql.connect(host=\'localhost\',user=\'root\',password=\'123456\',database=\'day47\')
cursor=conn.cursor() #拿到游标,即mysql >
#执行sql   改:
sql=\' update user1 set password = "5555555" where id=%s;\'
print(sql)
rows = cursor.execute(sql,(id))
print(\'%s row in set (0.00 sec)\'%rows)

conn.commit() #提交到数据库
cursor.close()
conn.close()

五、查:fetchone,fetchmany,fetchall

---------查fetchone,fetchmany,fetchall-----------
import pymysql
conn=pymysql.connect(host=\'localhost\',user=\'root\',password=\'123456\',database=\'day47\')
cursor=conn.cursor() #拿到游标,即mysql >
#执行sql   查:
sql=\'select * from user1;\'
rows = cursor.execute(sql)

#查单条fetchone
res1=cursor.fetchone()
res2=cursor.fetchone()
res3=cursor.fetchone()
print(res1)
print(res2)
print(res3)
print(res3[0])
#查多条fetchmany
print(cursor.fetchmany(3))
print(cursor.fetchone())
#查所有fetchall
print(cursor.fetchall())
print(cursor.fetchone())

#-------光标的移动--------
#1.绝对路径:从文件的开头位置算起
print(cursor.fetchall())
cursor.scroll(1,mode=\'absolute\')
print(cursor.fetchone())
cursor.scroll(3,mode=\'absolute\')
print(cursor.fetchone())

#2.相对路径:
print(cursor.fetchone())
print(cursor.fetchone())
cursor.scroll(2,mode=\'relative\') #相对于上面的两条向后移两条
print(cursor.fetchone())

print(\'%s row in set (0.00 sec)\' %rows)
cursor.close()
conn.close()

六、获取插入的最后一条数据的自增ID

------查看表中最后一行的iD
import pymysql
conn=pymysql.connect(host=\'localhost\',user=\'root\',password=\'123456\',
             database=\'day47\',charset=\'utf8\') cursor=conn.cursor() sql=\'insert into user1(user,password) values(%s,%s);\' rows=cursor.execute(sql,(\'alex\',\'123\')) # rows=cursor.executemany(sql,[(\'yuanhao\',\'123\'),(\'laowu\',\'123\'),(\'kgf\',\'12323\')]) conn.commit() print(cursor.lastrowid) #查看表中最后一行的iD cursor.close() conn.close()

 

 

 
 

 

以上是关于MySQL数据库学习第十二篇pymysql模块的主要内容,如果未能解决你的问题,请参考以下文章

第十二篇:数据库操作

第十二篇:多任务之协程

python全栈开发第十二篇Python的模块和包

Mysql优化(出自官方文档) - 第十二篇(优化锁操作篇)

python学习[第十二篇] 数据类型之 集合

第十二篇:常用模块