本篇对于Python操作MySQL主要使用两种方式:
pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同。
下载安装
pip3 install pymysql -i https://pypi.douban.com/simple
使用操作
1、执行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" %(user,pwd,)
# select * from userinfo where username=‘uu‘ or 1=1 -- ‘ and password=‘%s‘ #sql注入# 执行SQL,并返回收影响行数
cursor.execute(sql)# 获取第一行数据
result = cursor.fetchone() cursor.close() conn.close() if result: print(‘登录成功‘) else: print(‘登录失败‘)
注意:存在中文的时候,连接需要添加charset=‘utf8‘,否则中文显示乱码。
结论:excute执行SQL语句的时候,必须使用参数化的方式,否则必然产生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) #推荐这种方法,防止sql注入
# cursor.execute(sql,[user,pwd]) # cursor.execute(sql,{‘u‘:user,‘p‘:pwd}) #查询一行
result = cursor.fetchone()
#查询全部
result = cursor.fetchall()
#查询四行
result = cursor.fetchmany(4)
cursor.close() conn.close() if result: print(‘登录成功‘) else: print(‘登录失败‘)
注:在fetch数据时按照顺序进行,可以使用cursor.scroll(num,mode)来移动游标位置,如:
conn = pymysql.connect(host="localhost",user=‘root‘,password=‘‘,database="db666") cursor = conn.cursor() sql = "insert into userinfo(username,password) values(%s,%s)" # 插入多行数据 r = cursor.executemany(sql,[(‘egon‘,‘sb‘),(‘laoyao‘,‘BS‘)]) # ****** # 提交,不然无法保存新建或者修改的数据 conn.commit() cursor.close() conn.close()
fetch数据类型
关于默认获取的数据是元祖类型,如果想要或者字典类型的数据,即:
# 查 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.fetchall() print(result) # 查询4行 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() # 新插入数据的自增ID,插入多条时也是拿到最后一条的ID print(cursor.lastrowid) cursor.close() conn.close()
原文:http://www.cnblogs.com/domestique/p/6965304.html