PyMysql 是一个 纯Python 的Mysql客户端库,大多数的公共API都兼容mysqlclient 和 mysqldb.
# 1. 连接 conn = pymysql.connect( user = 'root', # 用户名 password = '111111', # 用户密码 db = 'aaa', # 连接的数据库 charset = 'gbk', # 设置字符编码 cursorclass=pymysql.cursors.DictCursor # 设置游标类型,已返回不同类型数据 ) # 👆 只是完成了连接 # 2. 创建游标 cursor = conn.cursor() # 👆 相当用创建了数据库操纵对象,获取数据的工具 # 3. 执行sql语句 cursor.execute('select * from student') # 返回了3条数据 # 4. 获取数据 result = cursor.fetchall() print(result) # 默认返回嵌套的元组,元组里的每一个元组是一行数据,未设置cursorclass的情况下 # 如果设置cursorclass=pl.cursors.DictCursor,返回的是一个字典列表,每个字典就是一行数据 # 5. 执行完毕之后关闭游标 cursor.close() # 6. 关闭连接 conn.close()
第二种方式 :
# 1. 连接 conn = pymysql.connect( user = 'root', # 用户名 password = '111111', # 用户密码 db = 'aaa', # 连接的数据库 charset = 'gbk', # 设置字符编码 cursorclass=pymysql.cursors.DictCursor # 设置游标类型,已返回不同类型数据 ) with conn.cursor() as cursor: sql = 'select * from student where stuAge >%s and stuAge<%s' cursor.execute(sql,(1,22)) # 拼接参数传给execute 方法 ,避免sql注入 res = cursor.fetchone() # 获取查询到的第1条数据 res2 = cursor.fetchmany(2) # 获取已取数据的后面3条数据 res_all = cursor.fetchall() # 获取查询剩下的所有数据 print(res_all) conn.close()
相比较为省略emmm 简单的一些是这样的..
conn = pymysql.connect( user = 'root', # 用户名 password = '111111', # 用户密码 db = 'aaa', # 连接的数据库 charset = 'gbk', # 设置字符编码 cursorclass=pymysql.cursors.DictCursor # 设置游标类型,已返回不同类型数据 ) with conn as cursor: sql = 'select * from student where stuAge >%s and stuAge<%s' cursor.execute(sql,(1,22)) #数据的获取 print(cursor.fetchmany(3)) # fetch one 返回一条数据 fetchmany 自定义N条数据 fetchall 所以数据 conn.close()
使用PyMysql 进行 增 , 删 , 改 操作:
import pymysql.cursors # 配置数据库连接信息 db ={ 'user':'root', 'password':'111111', 'db':'aaa', 'charset':'gbk', } # 连接数据库 conn = pymysql.connect(**db)
# pymysql 增 , 删 改 默认启动事务 try: with conn.cursor() as cursor: # 构造sql 语句 sql1 = 'insert into grade(gid , gName) values(77 , "软件三班")' sql2 = 'insert into grade(gid , gName) values(78 , "软件三班")' # 执行sql 语句 cursor.execute(sql1) cursor.execute(sql2) # 提交事务 conn.commit() except Exception as e: print(e) conn.rollback() finally: conn.close()
# 数据库 修改 : import random try: with conn as cursor: sql = 'select stuId from student' cursor.execute(sql) ids = cursor.fetchall() print(ids) sqls = 'update student set stuAge = %s where stuId = %s' for item in ids: cursor.execute(sqls,(random.randint(10,36),item['id'])) # ids返回的是字典key:value 所以取值用item['id'] conn.commit() except Exception as e: print(e) conn.rollback() finally: conn.close()
注意 :
1. pymysql 中执行的 sq| 语句不需要加;
2. execute 执行完查询后不直接返回结果,需要主动调用方法获取
3.要释放资源,关闭游示与连接 # cursor , conn
4.事务的回滚与提交 # rollback , commit