老师的博客地址:http://www.cnblogs.com/wupeiqi/articles/5713330.html
通过pymysql 模块可以通过朋友去操作mysql 数据库,首先的在pip上配置好pymysql模块。然后进行如下操作,简单的模拟用数据库去登录的操作。
模拟登陆
mport pymysql use=input('user:') psw=input('password:') #建立连接 host地址 database是具体的数据库 conn=pymysql.connect(host='localhost',user='root',password='',database='review60') # 进入数据后建立光标 cursor=conn.cursor() #info是指数据库的某个表 注意如果mysql是字符串的数据类型,一定要记得加上啊'',否则就会报错 sql="select * from info where user=%s and password=%s" %(use,psw,) #光标执行sql里面的代码cursor.execute(sql)#这个其实是有返回值的,表示影响了及行,一般是删改查的时候会有用。#得到执行代码说返回的信息 result=cursor.fetchone() #两个关闭,关闭数据库 cursor.close() conn.close() print(result) if result: print('登陆成功') else: print('登录失败')
上面的操作有一定的风险,请看下面。
当你的用户输入:sdf' or 1=1 -- 或者 :正确的用户名' -- 时肯定登录成功, 因为sql 就变成了select * from info where user='%s' and password='%s' mysql的注释是 -- 所以就能够绕开后面的直接拿到信息 sql="select * from info where user=%s and password=%s" cursor.execute(sql,use,psw)# cursor.execute(sql,[use,psw)]) cursor.execute(sql,[use,psw]) sql="select * from info where user=%(u)s and password=%(p)s" #%(use,psw,) cursor.execute(sql,{'u':use,'p':psw}) 输入多个时的写法 sql="select * from info where user=%s and password=%s" cursor.execute(sql,[(1,2),(3,4)])#其他类似的操作也可
关于数据库的commit和注册用户
import pymysql print('注册用户') use=input('user:') psw=input('password:') conn=pymysql.connect(host='localhost',user='root',password='',database='review60') cursor=conn.cursor(cursor=pymysql.cursors.DictCursor)#获取的是一个字典的形式 sql="insert into info(user,password) values (%s,%s)"#此时就不需要加上''了 a=cursor.execute(sql,[use,psw]) print('数据影响的行数:',a)#数据影响的行数 print('自增的id:',cursor.lastrowid)#获取新的自增的id conn.commit()#一定要提交,不然写入的数据会没有效果,就是写入失败 cursor.close() conn.close() print('注册成功')
关于fetch与查询
import pymysql print('查询数据库') conn=pymysql.connect(host='localhost',user='root',password='',database='review60') cursor=conn.cursor(cursor=pymysql.cursors.DictCursor)#得到信息是以字典的形式 sql='select * from info' cursor.execute(sql) a=cursor.fetchone() print('前一条数据:',a) #将光标往上移动一个 cursor.scroll(-1,mode='relative') b=cursor.fetchmany(2)#得到前两条数据 print('前两条数据:',b) #将光标移动到最开始的位置 cursor.scroll(0,mode='absolute') c=cursor.fetchall() print('全部数据:',c) cursor.close() conn.close()
注意由于fetchall是抓取全部的数据,你不知道数据库的东西到底有多大,所以的配合limit来使用。
。