1、操作流程
# 导包 import pymysql # 创建连接 conn = pymysql.connect(host="localhost", # 主机名或IP地址 port=3306, # 端口 user="root", # 用户名 password="root", # 密码 database="books") # 数据库名 # 获取游标 cursor = conn.cursor() # 执行sql sql = "......" cursor.execute(sql) # 关闭游标 cursor.close() # 关闭连接 conn.close()
注意点:非查询操作需要提交事务
提交方法:
1、自动提交
autocommit=True2、主动提交
提交事务: conn.commit() 回滚事务: conn.rollback() 2、数据库工具封装思路 1、创建连接 2、创建游标 3、执行sql try: # 获取游标对象 # 调用游标对象.execute(sql) # 如果是 查询: # 返回所有数据 # 否则: # 提交事务 # 返回受影响的行数 except: # 回滚事务 # 抛出异常 finally: # 关闭游标 # 关闭连接 4、关闭游标 5、关闭连接 3、封装实现# 导包 import pymysql # 创建工具类 class DBUtil(): # 初始化 __conn = None __cursor = None # 创建连接 @classmethod def __get_conn(cls): if cls.__conn is None: cls.__conn = pymysql.connect(host="localhost", port=3306, user="root", password="151621", database="books") return cls.__conn # 获取游标 @classmethod def __get_cursor(cls): if cls.__cursor is None: cls.__cursor = cls.__get_conn().cursor() return cls.__cursor # 执行sql @classmethod def exe_sql(cls, sql): try: # 获取游标对象 cursor = cls.__get_cursor() # 调用游标对象的execute方法,执行sql cursor.execute(sql) # 如果是查询 if sql.split()[0].lower() == "select": # 返回所有数据 return cursor.fetchall() # 否则: else: # 提交事务 cls.__conn.commit() # 返回受影响的行数 return cursor.rowcount except Exception as e: # 事务回滚 cls.__conn.rollback() # 打印异常信息 print(e) finally: # 关闭游标 cls.__close_cursor() # 关闭连接 cls.__close_conn() # 关闭游标 @classmethod def __close_cursor(cls): if cls.__cursor: cls.__cursor.close() cls.__cursor = None # 关闭连接 @classmethod def __close_conn(cls): if cls.__conn: cls.__conn.close() cls.__conn = None4、使用
from dbutil import DBUtil # sql = "select * from t_book" # sql = "insert into t_book(id, title, pub_date) values(4, '西游记', '1986- 01-01');" # sql = "update t_book set title='东游记' where title = '西游记';" # sql = "delete from t_book where title = '东游记';" result = DBUtil.exe_sql(sql) print(result)