python使用mysql
importpymysql
conn=pymysql.connect(
host= '127.0.0.1', #连接地址
port = 3306, #端口
user = root, #用户名
password = '', #密码
database = 'db', #库名称
charset = 'utf8' #编码格式 utf8,不是utf-8
)
cursor= conn.cursor(pymsql.cursors.DictCursor) #产生一个游标,以字典的形式返回查询出来的数据,键是表的字段,值是表字段对应的信息
sql = select * from userinfo #写sql语句
cursor.execute(sql) #执行传入的sql语句
print(cursor.fetchone()) #拿到表中一条数据
print(cursor.fetchone())print(cursor.fetchone())
cursor.scroll(1,'absolute') #absolute绝对移动,前面数字写几,就相对于起始位置向后移动几位
cursor.srcoll(1,'relative') #relative相对移动,前面写几,就相对于当前位置向后移动几位
print(cursor.fetchall()) #拿到表中所有的数据
sql注入问题
conn =pymysql.connect(
host= '127.0.0.1',
port= 3306,
user=root,
password= '',
database= 'db',
charset= 'utf8')
cursor=conn.cursor(pymsql.cursors.DictCursor)
username= input('请输入用户名:')
password= input('请输入密码:')
sql= "select * from userinfo where name = '%s' and password ='%s'" %s(username, password)
res=cursor.execute(sql)ifres:print(cursor.fetchall())else:print('账号或密码错误')
我们用上述一段代码诠释一下sql注入的问题, 当我们输入正确的账号密码的时候,发现可以正常打印字段数据,当我们输入错误账号或密码时,就显示账号密码错误
以我们只知道用户名为例
竟然查到了用户的所有信息,这个是根据 -- 注释做到的sql注入
假如我们账号密码都不知道,那么如何用sql注入去获取网站的用户信息呢
在我们对账号密码毫不知情的情况下,我们使用or判断条件的成立,再加上 --注释,可以获取到网站所有的用户信息
根据以上两个问题我们应该如何解决呢?
conn =pymysql.connect(
host= '127.0.0.1',
port= 3306,
user=root,
password= '',
database= 'db',
charset= 'utf8')
cursor=conn.cursor(pymsql.cursors.DictCursor)
username= input('请输入用户名:')
password= input('请输入密码:')
sql= "select * from userinfo where name = %s and password =%s"res=cursor.execute(sql,(username,password)) # execute可以自动识别sql语句中的%s,它可以帮助你过滤特殊的字符,避免sql注入的问题ifres:print(cursor.fetchall())else:print('账号或密码错误')
总结:
1.sql注入,就是利用注释等具有特殊意义的符号,来完成的
2.后续写sql语句时,不要手动去拼接关键性的数据,而是交由execute去拼接
python对mysql的增,改,删操作
importpymysql
conn=pymysql.connect(
host= '127.0.0.1',
port= 3306,
user=root,
password= '',
database= 'db',
charset= 'utf8')
cursor=conn.cursor(pymsql.cursors.DictCursor)
sql= "insert into user(name,password) values('wu','123')" #插入,增
cursor.execute(sql)
conn.commit() 在新增时要写conn.commit()
importpymysql
conn=pymysql.connect(
host= '127.0.0.1',
port= 3306,
user=root,
password= '',
database= 'db',
charset= 'utf8')
cursor=conn.cursor(pymsql.cursors.DictCursor)
sql= "update user set name='qazqaz' where id = 1" #修改
cursor.execute(sql)
conn.commit() #在修改时要写conn.commit()
importpymysql
conn=pymysql.connect(
host= '127.0.0.1',
port= 3306,
user=root,
password= '',
database= 'db',
charset= 'utf8')
cursor=conn.cursor(pymsql.cursors.DictCursor)
sql= "delete from user where id = 1" #删除
cursor.execute(sql)
conn.commit()#在删除时要写conn.commit()