数据库工具类封装
封装的目的:
- 将常用的数据库操作,封装到一个方法。后续再操作数据库时候,通过调用该方法来实现
- 提高代码的复用性
设计数据库工具类
获取关闭连接
import pymysql
class DBUtil:
# 定义类属性,为了解决报黄的问题
conn = None
# 链接数据库
@classmethod
def __connect_db(cls):
cls.conn = pymysql.connect(host="211.103.136.244", port=7061, user="student", password="iHRM_student_2022",
database="test_db", charset="utf8")
return cls.conn
# 关闭数据库
@classmethod
def __close_db(cls):
cls.conn.close() # 类属性可以直接调用方法,但不会提示
# 封装读取的方法
@classmethod
def query_db(cls, sql):
result = None
cursor = None
try:
# 创建数据库的链接
cls.conn = cls.__connect_db()
# 获取游标
cursor = cls.conn.cursor()
# 执行sql,return 查询的结果
cursor.execute(sql)
result = cursor.fetchone() # 提取第一行
except Exception as err:
print("读取数据库报错:", err)
finally:
# 关闭游标
cursor.close()
# 关闭链接
cls.__close_db()
return result
# 封装增删改的方法
@classmethod
def update_db(cls, sql):
cursor = None
try:
# 创建数据库的链接
cls.conn = cls.__connect_db()
# 获取游标
cursor = cls.conn.cursor()
# 执行sql,打印一下影响的行数
cursor.execute(sql)
affect_rows = cls.conn.affected_rows()
print("影响数据库的行数:", affect_rows)
# 事务的提交和回滚
cls.conn.commit()
except Exception as err:
# 事务的回滚
cls.conn.rollback()
print("增删改数据库报错:", err)
pass
finally:
# 关闭游标
cursor.close()
# 关闭链接
cls.__close_db()
if __name__ == '__main__':
res1 = DBUtil.query_db("select * from t_book ;")
print(res1)
DBUtil.update_db("insert into t_book (id,title,pub_date) VALUES(1256345253,'钢铁侠 ','2022-5-1');")
res2 = DBUtil.query_db("select * from t_book where id = 10145253 ;")
print(res2)
pass
```python
运行结果
(2, '西游记', datetime.date(1980, 1, 1), 1, 0, 0)
影响数据库的行数: 1
(1255, '钢铁侠 ', datetime.date(2022, 5, 1), 0, 0, 0)