pymysql

时间:2019-10-22
本文章向大家介绍pymysql,主要包括pymysql使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

python中pymysql模块

# 实现:使用Python实现用户登录,如果用户存在则登录成功(假设该用户已在数据库中)


import pymysql
user = input('请输入用户名:')

pwd = input('请输入密码:')



# 1.连接
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', password='', db='db8', charset='utf8')


# 2.创建游标
cursor = conn.cursor()

#注意%s需要加引号
sql = "select * from userinfo where username='%s' and pwd='%s'" %(user, pwd)
print(sql)

# 3.执行sql语句
cursor.execute(sql)

result=cursor.execute(sql) #执行sql语句,返回sql查询成功的记录数目
print(result)


# 关闭连接,游标和连接都要关闭
cursor.close()
conn.close()

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

二、execute()之sql注入

最后那一个空格,在一条sql语句中如果遇到select * from userinfo where username='app01' -- asadasdas' and pwd='' 则--之后的条件被注释掉了(注意--后面还有一个空格)

#1、sql注入之:用户存在,绕过密码
app01' -- 任意字符

#2、sql注入之:用户不存在,绕过用户与密码
xxx' or 1=1 -- 任意字符

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

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

三、增 删 改 :一定要commit

import pymysql

# use = input('请输入用户名:')
# pwd = input('请输入密码:')
conn = pymysql.connect( host='localhost',
                 user='root',
                 password="123",
                 database='db8',
                 port=3306,
                 charset='utf8')
cursor = conn.cursor()
# sql = 'select * from userinfo where  name = %(username)s and pwd = %(pwd)s ;'
# sql = 'insert into userinfo(name,pwd) values(%s,%s)'
# sql = 'update userinfo set name = %s where id=6'

sql = 'truncate table userinfo'
print(sql)

#增
'''插入一条数据用 execute'''
# res = cursor.execute(sql,[use,pwd])

'''插入多条数据使用executmany'''
# res = cursor.executemany(sql,[('李四','88888888'),('王五','666666')])

#改

# res = cursor.execute(sql,[use])
#删
res = cursor.execute(sql)
print(res)


'''注意这里-增--删--改- 操作的时候一定要加commit不然是写不进数据库的'''
conn.commit()
cursor.close()

conn.close()

四、查:fetchone,fetchmany,fetchall

游标移动位置:scroll(int,mode='relative')
relative 相对于自己进行移动
absolute 相对于左上角原点进行移动

import pymysql

conn = pymysql.connect( host='localhost',
                 user='root',
                 password="123",
                 database='db8',
                 port=3306,
                 charset='utf8')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)   # 原本返回的数据是一个大元组里有多个小元组,这里设置了就变成了一个列表里有多个字典

#查
sql = 'select * from userinfo'
cursor.execute(sql)   # 执行命令
# row= cursor.fetchone()   #返回的结果  获取下一行数据,以第一行为为首行
# print(row)
# row= cursor.fetchone()
# print(row)
# row = cursor.fetchall()   #获取全部数据
row = cursor.fetchmany(8)    # 获取多条数据,默认为0只获取第一条数据,加了数值就是获取几条数据,如果值比数据的条数大就获取全部
#-1不获取最后一条数据
#-2不获取最后两条数据


'''游标移动位置'''
cursor.scroll(2,mode='absolute')    # 以左上角的原点为参照物进行移动,0为第一行的开始位置
row = cursor.fetchone()
print(row)
cursor.scroll(-1,mode='relative')  #向对于本身进行移动,负值为向上,正值为向下
row = cursor.fetchone()

print(row)


cursor.close()  #关闭游标
conn.close()    #关闭连接

原文地址:https://www.cnblogs.com/whileke/p/11718914.html