pymysql是一个python编写的mysql驱动程序,让我们的python语言可以操作mysql数据库。
pymysql是第三方库,不是python中自带的,需要下载安装:
pip install pymysql
1.pymysql的使用步骤
''' 1.需要引入pymysql import pymysql 2.创建连接 pymysql.connect() 3.创建游标 pymysql.connect().cursor() 4.执行sql语句 5.获取结果 6.关闭游标 7.断开链接 '''
游标
游动的标签;作用:可以帮我们实现一行一行的取数据。
2.pymysql的操作
连接数据库
1 import pymysql 2 3 # 连接mysql服务器 4 conn = pymysql.connect(host='127.0.0.1',user='root',passwd='123456',port=3306,db='firstdb',charset='utf8') 5 6 # 创建游标 7 cursor = conn.cursor() 8 9 # 执行sql语句,sql语句对于python来说就是一条字符串 10 effect_row = cursor.execute("select * from stuinfo") 11 12 # 在结果中取出(一条数据) 13 row = cursor.fetchone() 14 15 # 输出结果 16 print(row) 17 18 # 关闭游标 19 cursor.close() 20 21 # 断开连接 22 conn.close() 23 24 # 打印输出结果(1, '小马', '男', 20, '杭州', 1)
获取查询
import pymysql # 连接mysql服务器 conn = pymysql.connect(host='127.0.0.1',user='root',passwd='123456',port=3306,db='firstdb',charset='utf8') # 创建游标 cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 执行sql语句,sql语句对于python来说就是一条字符串 effect_row = cursor.execute("select * from stuinfo") #在结果中取出(所有数据) result = cursor.fetchall() for i in result: for k,v in i.items(): print(k,':',v) # 输出结果 print(result) # 关闭游标 cursor.close() # 断开连接 conn.close()
插入操作(一次插入一条)
import pymysql # 连接mysql服务器 conn = pymysql.connect(host='127.0.0.1',user='root',passwd='123456',port=3306,db='firstdb',charset='utf8') # 创建游标 cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 执行sql语句,sql语句对于python来说就是一条字符串 effect_row = cursor.execute("insert into `stuinfo` set `sname`='小李',sex=2,age=55,city='香港',seat=100") # 在pymysql中事务是默认开启的,是连接对象 conn.commit() # 在游标中获取最后插入的id new_id = cursor.lastrowid print(new_id) # 关闭游标 cursor.close() #断开连接 conn.close()
一次插入多条
import pymysql # 连接mysql服务器 conn = pymysql.connect(host='127.0.0.1',user='root',passwd='123456',port=3306,db='firstdb',charset='utf8') # 创建游标 cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 执行sql语句,一次插入多条,(方法一) effect_row = cursor.execute("insert into `stuinfo` values(null,'A',1,11,'A',1),(null,'A',1,11,'A',1),(null,'A',1,11,'A',1)") ''' # executemany 可以写多个参数,多个参数用list包裹,里面是tuple,一次插入多条(方法二) effect_row = cursor.executemany("insert into stuinfo values(%s,%s,%s,%s,%s,%s)",[(None,'B',2,22,'B',2),(None,'B',2,22,'B',2)]) ''' # 在pymysql中事务是默认开启的,是连接对象 conn.commit() # 返回受影响的记录数 print(effect_row) # 关闭游标 cursor.close() # 断开连接 conn.close()
调用存储过程
import pymysql # 连接mysql服务器 conn = pymysql.connect(host='127.0.0.1',user='root',passwd='123456',port=3306,db='py1809',charset='utf8') # 创建游标 cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 调用存储过程 cursor.callproc('pro_3',args=(10,)) # 打印结果 result = cursor.fetchall() print(result) # 关闭游标 cursor.close() #断开连接 conn.close()
为什么需要使用存储过程?
一个项目是一个Django,假如sql语句写在了django中,那么sql语句是没有通用性的;使用存储过程是为了保存较为复杂的sql语句,并让该语句有多项目通用性。
【补充】:字符拼接的带来安全影响 sql注入。
防止sql注入,不需要我们用正则匹配,execute自带防止sql注入功能。