PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb。
安装
pip3 install pymysql
使用
import pymysql # 构造上下文 config = { 'host': '127.0.0.1', 'port': 3306, 'user': 'root', 'password': 'mysql', 'db': 'demo', 'charset': 'utf8', } # 创建连接 conn = pymysql.connect(**config) # 创建游标 cursor = conn.cursor() # ————————————————————操作例子1———————————————————————— # 执行SQL,并返回收影响行数 effect_row = cursor.execute("insert into class (class_name) values ('五班')") print("受影响行数为:%s" % effect_row) # ————————————————————操作例子2———————————————————————— cursor.execute("select * from class") # 获取第一行数据 row_1 = cursor.fetchone() print(row_1) # (1, '一班') # 获取前n行数据 row_2 = cursor.fetchmany(3) print(row_2) # ((2, '二班'), (3, '三班'), (4, '四班')),可以看到并不是从第一个位置开始查找,而是从上次查找位置开始的 # 获取所有数据 cursor.scroll(0, mode="absolute") # 这个语句是用来给查询进行绝对定位的,由于其实位置是0,所有设置为0,这样下次查找又是从第一个开始查找。 row_3 = cursor.fetchall() print(row_3) # ((1, '一班'), (2, '二班'), (3, '三班'), (4, '四班'), (5, '五班'), (7, '五班')) # ————————————————————操作例子3———————————————————————— cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 关于默认获取的数据是元祖类型,如果想要字典类型的数据,这样设置即可 cursor.execute("select * from class") row_4 = cursor.fetchall() print(row_4) # [{'id': 1, 'class_name': '一班'}, {'id': 2, 'class_name': '二班'}, {'id': 3, 'class_name': '三班'}, {'id': 4, 'class_name': '四班'}, {'id': 5, 'class_name': '五班'}, {'id': 7, 'class_name': '五班'}] # 提交,不然无法保存新建或者修改的数据 conn.commit() # 关闭游标 cursor.close() # 关闭连接 conn.close()
可以使用cursor.scroll(num,mode)来移动游标位置,如:
- cursor.scroll(1,mode='relative') # 相对当前位置移动
- cursor.scroll(2,mode='absolute') # 相对绝对位置移动
使用with简化连接过程
import pymysql import contextlib #定义上下文管理器,连接后自动关闭连接 @contextlib.contextmanager def mysql(host='127.0.0.1', port=3306, user='root', passwd='', db='User',charset='utf8'): conn = pymysql.connect(host=host, port=port, user=user, passwd=passwd, db=db, charset=charset) cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) try: yield cursor finally: conn.commit() cursor.close() conn.close() # 执行sql with mysql() as cursor: print(cursor) row_count = cursor.execute("select * from tb") row_1 = cursor.fetchone() print( row_count, row_1)