Python操做MySQL一共有两种方式,第一种是用原生模块pymysql和mysqldb,这两种模块在py2中都支持,可是在py3中只支持pymysql,可是pymysql能够经过pymysql.install_as_MySQLdb()的方式构形成和mysqldb同样的使用;第二种方式是ORM框架 SQLAchemy。mysql
pip install pymysql
import pymysql # 增,删,改除了sql语句不一样,使用的方式一致 conn = pymysql.connect(host="localhost",user='root',password='',database="db2") #链接mysql cursor = conn.cursor() #建立游标 sql = "insert into userinfo(username,password) values(%s,%s)" #sql语句
#r表示执行这条语句受影响的行数
r = cursor.execute(sql ,['wusir','123'])
#r = cursor.executemany(sql ,[('jack','213'),('tom','234')]) #表示插入多条数据,只有在插入数据的时候才使用executemany
conn.commit() #增删改执行必定要加conn.commit() cursor.close() #关闭游标 conn.close() #关闭链接
# 查 conn = pymysql.connect(host="localhost",user='root',password='',database="db2") # cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) #使用这种游标查出来的数据是列表套子典
cursor = conn.cursor() #使用这种游标查出来的数据是元祖套元祖 sql = "select * from userinfo" cursor.execute(sql) #cursor.scroll(1,mode='relative') # 让游标相对当前位置移动 #cursor.scroll(2,mode='absolute') # 让游标相对绝对位置移动
#result = cursor.fetchone() # 取一个数据 #print(result) #result = cursor.fetchmany(4) #取指定数目的数据 #print(result)
result = cursor.fetchall() #取查出来的全部数据
print(result)
cursor.close() conn.close() #PS:每取一个数据游标就会向下移动一位 # 新插入数据的自增ID: cursor.lastrowid
# 如当有一个主从表时,从表要根据主表的id变化来插入数据,这时可使用cursor.lastrowid来获取最新插入的主表id。
写一个很简单的基于mysql的登陆程序,数据库里面只有一个user为alex,pwd为123,当使用第一种写法时会出现mysql注入的状况。sql
import pymysql user = input('>>请输入用户名:') pwd = input('>>请输入密码:') conn = pymysql.connect(host='127.0.0.1',user='root',password='',database='db2') cursor = conn.cursor()
#第一种写法(不能够) sql = "select * from userinfo where name='%s' and pwd='%s'"%(user,pwd) cursor.execute(sql) res = cursor.fetchone() print(res)
#第二种写法(能够)
sql = "select * from userinfo where name=%s and pwd=%s"
cursor.execute(sql,[user,pwd])
res = cursor.fetchone()
print(res)
#第三种写法(能够)
sql = "select * from userinfo where name=%(u)s and pwd=%(p)s"
cursor.execute(sql,{'u':user,'p':pwd})
res = cursor.fetchone()
print(res)
if res:
print('登录成功')
else:
print('登录失败')
这就是mysql注入,由于mysql中的注释是--,使用这种字符串拼接会将后面的语句注释掉,同时1=1成立,这样就会出现即便没有这个用户也会登陆成功。数据库