pymysql
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注入功能。
最值得欣赏的风景,是自己奋斗的足迹!