Python使用DB封装

这篇博客分享了作者在项目中对Python数据库操作进行封装的经验,主要介绍了如何创建一个所有Model继承的Entity类,并且Entity类扩展了dict的功能。此外,还讲解了DBHelper类的封装,包括异步db的使用,以及一些组装SQL的方法。
摘要由CSDN通过智能技术生成

自己在项目中使用db操作时的一点封装,觉得用得好的话还挺好用的,记录一下。当然也有很多开源的好用的db封装库,不去比较,自己用的顺手就是好的。

一般每一个数据库表对应一个model,首先有一个所有model都继承的Entity类,为了更多方便的操作,这里Entity继承了dict。

class Entity(dict):

    def __getattr__(self, name, default = None):
        try:
            return self[name]
        except:
            return default
    
    def __setattr__(self, name, value = ""):
        self[name] = value
    
    def clr_and_set(self, **kwargs):
        self.clear()
        self.update(kwargs)

    def key_dict(self, obtain_time=True):
        if hasattr(self.__class__,'table_keys'):
            for key in self.keys():
                if key not in self.__class__.table_keys:
                    self.pop(key)
            if obtain_time:
                if "created_at" in self.__class__.table_keys:
                    self.update(created_at=sec2str(time.time()))
                if "updated_at" in self.__class__.table_keys:
                    self.update(updated_at=sec2str(time.time()))
        return self

    def db_insert(self, callback=None):
        DBHelper().insert(self.__class__.table_name, self.key_dict(), callback=callback)
        
    def db_multi_insert(self, chunksize=100, datas=[], callback=None):
        DBHelper().multi_insert(self.__class__.table_name, chunksize, datas, callback=callback)
        
    def db_replace(self, callback=None):
        DBHelper().replace(self.__class__.table_name, self.key_dict(), callback=callback)
    
    def db_multi_replace(self, chunksize=100, datas=[], callback=None):
        DBHelper().multi_replace(self.__class__.table_name, chunksize, datas, callback=callback)

    #key_dict, set_dict
    def db_update(self, set_dict, callback=None):
        if "updated_at" in self.__class__.table_keys:
            set_dict.update(updated_at=sec2str(time.time()))
        DBHelper().update(self.__class__.table_name, set_dict, self.key_dict(False), callback=callback)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值