数据库连接问题 pymysql
现在在写数据库模板,有一个问题一直困扰,在非商用环境中(也就是不需要用连接池的情况),我想实现这个功能:当这个链接self.connection如果超过1个小时没有被使用,就关闭这个链接 self.connection.close(), 自己摸索3天无果,特来求高手指点迷津,因为是小白入门不久, (如果能写出详细的代码更佳。) 我的源代码如下:如果代码有其他的优化空间, 大佬也可以一并指出,万分感谢!
import traceback# 这个模块可以用来打印完整的错误信息
import pymysql
class Connect_DB(object):
# 调用创建数据库链接函数,创建表函数
def __init__(self, host, user, password, db, charset):
self.host = host
self.user = user
self.password = password
self.db = db
self.charset = charset
self.connect()# 连接数据库函数得到了self.connection
self.create_table()# 创建表函数
print(1)
# 连接数据库函数
def connect(self):
try:
self.connection = pymysql.connect(host=self.host, user=self.user, password=self.password, db=self.db,charset=self.charset)
except:
self.write_log()
# 创建表函数(如果没有表的话就调用)
def create_table(self):
try:
# 这里通过self.cursor把cursor变成类属性,全局可用
with self.connection.cursor() as cursor:
create_table = """
create table if not exists student (
id int(8) not null auto_increment primary key,
name varchar(255) not null,
chinese float(4) not null default '0' ,
math float(4) not null default '0',
english float(4) default '0' not null)
auto_increment =10000;
"""
# 上面的auto_increment =10000是为了设定ID初始值
cursor.execute(create_table)
self.connection.commit()
print('数据库创建表')
except Exception as e:
self.write_log()
# 增删改查函数
def change_data(self, sql):
# sql:sql语句
# 返回:操作的记录条数
try:
with self.connection.cursor() as cursor:
result = cursor.execute(sql)
self.connection.commit()
return result
except:
self.write_log()
self.connection.rollback()# 回滚操作
# 查询数据库函数
def query(self, sql, fetch_one):
# sql:sql语句
# fetch_one:布尔值,判断查询一条还是多条记录。
# 返回值:查询结果
try:
with self.connection.cursor() as cursor:
cursor.execute(sql)
if fetch_one:
result = cursor.fetchone()
else:
result = cursor.fetchall()
return result
except:
self.write_log()
# 失败后写日志函数
def write_log(self):
with open('connect_db_log.txt', 'a+') as file:
traceback.print_exc(file=file)# 这个模块可以用来打印完整的错误信息
file.flush()
# 删除函数,函数执行完毕触发,这样就不用手动关闭链接了。
def __del__(self):
self.connection.close()
if __name__ == '__main__':
connect = Connect_DB('localhost', 'root', 'masike', 'student_sys', 'utf8')
页:
[1]