自己在项目中使用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)