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注入功能。

 

最值得欣赏的风景,是自己奋斗的足迹!