pymysql模块

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)

 

posted @ 2018-09-13 09:24  苦行僧95  阅读(193)  评论(0编辑  收藏  举报