MySQL数据库与python交互
1.安装引入模块
-
安装mysql模块
pip install PyMySQL;
-
文件中引入模块
import pymysql
2.认识Connection对象
-
用于建立与数据库的连接
-
创建对象:调用connect()方法
conn = pymysql.connect(host="主机",port=3306,user="用户名",passwd="密码",db="数据库名",charset="utf8")
如果是本机,host填'localhost',port端口号,默认3306,charset字符编码,默认是'gb2312',要求与数据库创建时指定的编码一致,否则中文会乱码
-
对象方法
- close()-------关闭连接
- commit()-----提交事务,使操作生效,在执行select查询任务时,则不需要这一步
- rollback()----回滚事务,放弃之前的操作
- cursor()------创建cursor对象,用于执行sql语句
3.认识Cursor对象
-
执行sql语句
-
创建对象,调用Connection对象的cursor()方法
cur = conn.cursor()
-
对象的方法:
- close()-----关闭
- execute(sql,[,parameters])-----执行语句,返回受影响的行数,第二个参数可选,元组或列表类型,参数化可以防止sql注入风险
- fetchone()-----执行查询语句时,获取查询结果集的第一个行数据,返回一个元组,未查到,则返回None。如果结果集不止一条数据,可以再次执行fetchone()获得第二个行数据,依此类推
- fetchall()-----执行查询时,获取结果集的所有行,一行构成一个元组,再将这些元组装入一个元组返回,未查到,则返回空元组()。
- scroll(value[,mode])-----将行指针移动到某个位置。mode表示移动的方式,默认值为'relative',value表示基于当前行向上(取负值)或向下(取正值)移动的行数。当mode的值为‘absolute’,value表示基于第一行数据(位置为0)向下移动的行数。
-
对象的属性:
- rowcount只读属性,表示最近一次execute()执行后受影响的行数
- connection获得当前连接对象
4.示例
-
增加、修改、删除一条学生表数据
# coding = utf-8 import pymysql con = pymysql.connect(host='localhost',port=3306,user='root',password='123',db='test',charset='utf8') # 创建connect对象 cur = conn.cursor() #创建cursor对象 name = input('请输入添加的学生姓名:') sql1 = 'insert into students(name) values(%s);' sql2 = 'delete from students where name = "老王";' sql3 = 'update students set name = “老张” where name = "老李";' try: cur.execute(sql1,[name]) #增加一条数据 cur.execute(sql2) #删除一条数据 cur.execute(sql3) #修改一条数据 except Exception as e: print(e) con.rollback() # 放弃之前的所有操作 else: con.commit() # 提交,使所有操作生效 cur.close() # 关闭cursor对象 con.close() # 关闭连接
-
查询一条学生表数据以及剩下的多行数据
# coding = utf-8 import pymysql con = pymysql.connect(host='localhost',port=3306,user='root',password='123',db='test',charset='utf8') # 创建connect对象 cur = conn.cursor() #创建cursor对象 try: sql = 'select * from students;' count = cur.execute(sql) data1 = cur.fetchone() #查找第一行数据 print(data1) data2 = cur.fetchall() # 查找剩下所有行数据 print(data2) except Exception as e: print(e) cur.close() con.close()