2.pymysql学习笔记

pymysql模块:
pip install pymysql
python模块:对数据库进行操作(sql语句)

pymysql用法和SQL注入

  • -- 在MySQL中是注释的意思
#####SQL注入######
sql = "select * from userinfo where username='%s' and password='%s'" %(user,pwd,)


别人输入的:
用户名:hdfjksd' or 1=1 -- 
密码:
#这条语句在字符串格式化之后变成了下面的
select * from userinfo where username='hdfjksd' or 1=1 -- ' and password='%s'

#这样的话   -- ' and password='%s'  这些就是注释了,没作用了

sql = "select * from userinfo where username='%s' and password='%s'" %(user,pwd,)

import pymysql

user = input("username:")
pwd = input("password:")

#连接数据库(作用:打开通道)
conn = pymysql.connect(host="localhost",user='root',password='',database="db666")

#这是一个游标(作用:操作)
cursor = conn.cursor()

#sql语句(这个语句一定不要自己拼接,因为别人这样写的时候可以轻易破解
用户名:hdfjksd' or 1=1 -- 
密码:
)#############这叫SQL注入#######
sql = "select * from userinfo where username='%s' and password='%s'" %(user,pwd,)

#这个里面加SQL语句并且执行
cursor.execute(sql)

#拿第一条数据(因为拿出来的数据可能有多个)
result = cursor.fetchone()

#关闭游标
cursor.close()
#关闭通道
conn.close()

if result:
    print('登录成功')
else:
    print('登录失败')

防止SQL注入

import pymysql

user = input("username:")
pwd = input("password:")

conn = pymysql.connect(host="localhost",user='root',password='',database="db666")
cursor = conn.cursor()
sql = "select * from userinfo where username=%s and password=%s"

cursor.execute(sql,user,pwd)
# cursor.execute(sql,[user,pwd])#这样也可以
# cursor.execute(sql,{'u':user,'p':pwd})#有占位符后这样也可以

result = cursor.fetchone()
cursor.close()
conn.close()
if result:
    print('登录成功')
else:
    print('登录失败')

pymysql用法

import pymysql

# 增加,删,改的时候都需要conn.commit()提交,查询的时候不需要
conn = pymysql.connect(host="localhost",user='root',password='',database="db666")
cursor = conn.cursor()
sql = "insert into userinfo(username,password) values('root','123123')"
# 受影响的行数(可以不加这个r)
#cursor.execute(sql)
r = cursor.execute(sql)

# #  ******
conn.commit()
cursor.close()
conn.close()

#变量插入
conn = pymysql.connect(host="localhost",user='root',password='',database="db666")
cursor = conn.cursor()
sql = "insert into userinfo(username,password) values(%s,%s)"
cursor.execute(sql,(user,pwd,))


#批量插入   cursor.executemany
sql = "insert into userinfo(username,password) values(%s,%s)"
# 这里r是受影响的行数(可以不加这个r)
#cursor.executemany(sql,[('egon','sb'),('laoyao','BS')])
r = cursor.executemany(sql,[('egon','sb'),('laoyao','BS')])

conn.commit()
cursor.close()
conn.close()




# 查
conn = pymysql.connect(host="localhost",user='root',password='',database="db666")

#这样拿到的数据展示的时候有列标题,这样打印出来好看
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

sql = "select * from userinfo"
cursor.execute(sql)


#cursor.scroll(1,mode='relative')  # 相对当前位置移动
#cursor.scroll(2,mode='absolute') # 相对绝对位置移动
result = cursor.fetchone()#一次取一个
print(result)
result = cursor.fetchone()#再次取 取的是接下来的那条
print(result)
result = cursor.fetchone()
print(result)
result = cursor.fetchall()#全部取出,当SQL语句用limit语句的时候,就只取那一页
print(result)


result = cursor.fetchmany(4)#一次取多个
print(result)
cursor.close()
conn.close()




# 新插入数据的自增ID: cursor.lastrowid
import pymysql

conn = pymysql.connect(host="localhost",user='root',password='',database="db666")
cursor = conn.cursor()
sql = "insert into userinfo(username,password) values('asdfasdf','123123')"
cursor.execute(sql)
conn.commit()
print(cursor.lastrowid)#打印新插入数据的自增ID
cursor.close()
conn.close()

posted @ 2020-05-07 11:46  白狼博物  阅读(120)  评论(0)    收藏  举报