本文全部的实验基于mysql的python数据库里的test表(估计给数据库起名为python的人也就只有我了),test表结构以下:python
能够把connection理解成一个事务,事务的最终有两种操做:提交connection.commit()和回滚connection.rollback()mysql
import pymysql import time # 链接数据库 connection = pymysql.connect(host='127.0.0.1', port=3306, database='python', user='root', password='root', charset='utf8') try: with connection.cursor() as cursor: sql = "insert into test(str, num, time) values(%s, %s, %s)" # 插入整数也用%s for i in range(10): cursor.execute(sql, ('hello,world', i, time.strftime('%y-%m-%d %H-%M-%S'))) # 这里给的整数i connection.commit() # 提交数据库添加操做 with connection.cursor() as cursor: sql = "select id, str from test where num > %s" cursor.execute(sql, (3,)) # 每次取结果集,cursor将会向后移动 print(cursor.fetchone()) # 取一行结果集 print(cursor.fetchmany(2)) # 取若干行 print(cursor.fetchall()) # 取全部行 except Exception as e: print(e) print('数据库操做发生异常') connection.rollback() else: print('数据库操做成功') finally: connection.close()
1. 每次调用execute()后都会返回受影响的行数,一样能够经过cursor.rowcount进行获取sql
2. fetch()默认以元组的形式返回查询结果,能够在建立cursor的时候传入参数,设置fetch()的查询结果以字典的形式返回,这样就能够在查询结果里,根据key来索引value了数据库
cursor = connection.cursor(cursor=pymysql.cursors.DictCursor)