鱼C论坛

 找回密码
 立即注册
查看: 1369|回复: 0

[技术交流] 数据库连接问题 pymysql

[复制链接]
发表于 2020-8-31 14:35:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
现在在写数据库模板,有一个问题一直困扰,在非商用环境中(也就是不需要用连接池的情况),我想实现这个功能:当这个链接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')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-19 02:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表