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()
浙公网安备 33010602011771号