20 - 需要配合:@Table(name, msg, **kwargs)使用
23 def __init__(self, config_obj=None, instance=None, log_conf=None, close_log=False, serializer=QuerySet, **kwargs):
27 实体化之后你可以使用像类似find_one()等操做
29 可以调用conversion()方法将其转化为ORM框架常用的样式
31 无需担心类型问题,无需担心datetime无法转换
33 #加入Table注解,并标注表名与描述,因考虑使用者后期优化问题,请务必填写MSG参数
35 @Table(name="demo_table", msg="demo message")
37 #继承Repository并得到相对应的半自动ORM操做
38 class TestClass(Repository):
40 def __init__(self,**kwargs):
41 super(DemoTable, self).__init__(config_obj=ConF(), log_conf={
48 aestate.util.Config.config的配置类,详见:aestate.work.Config.MysqlConfig
61 serializer:序列化使用的类,默认使用aestate.work.Serialize.QuerySet
75 :param close_log:是否关闭日志显示功能
76 :param serializer:自定义序列化器,默认使用aestate.work.Serialize.QuerySet
81 if config_obj
is None:
82 ALog.log_error(msg=
"缺少配置类`config_obj`", obj=FieldNotExist, raise_exception=
True)
85 ParseUtil.set_field_compulsory(
86 self, key=
'config_obj', data=kwargs, val=config_obj)
88 ParseUtil.set_field_compulsory(
89 obj=self, data=kwargs, key=
'abst', val=
False)
91 ParseUtil.set_field_compulsory(
92 self, key=
'close_log', data=kwargs, val=close_log)
94 ParseUtil.set_field_compulsory(self, key=
'__table_name__', data=kwargs,
95 val=self.__table_name__
if hasattr(self,
'__table_name__')
else
96 '"__table_name__" parsing failed')
99 ParseUtil.set_field_compulsory(
100 self, key=
'instance', data=kwargs, val=instance)
102 ParseUtil.set_field_compulsory(
103 self, key=
'fields', data=kwargs, val=list(self.instance.getFields().keys()))
105 ParseUtil.set_field_compulsory(
106 self, key=
'sqlFields', data=self.config_obj.__dict__, val=_mysql.Fields())
109 ParseUtil.set_field_compulsory(
110 self, key=
'result', data=kwargs, val=
None)
111 ParseUtil.set_field_compulsory(self, key=
'log_obj', data=kwargs,
112 val=
ALog(**log_conf)
if log_conf
is not None else None)
113 if hasattr(self,
'close_log')
and not self.close_log
and not self.abst:
114 ALog.log(obj=self, msg=
'Being Initialize this object', LogObject=self.log_obj)
115 ParseUtil.set_field_compulsory(
116 self, key=
'serializer', data=kwargs, val=serializer)
119 ParseUtil.set_field_compulsory(
120 self, key=
'operation', data=kwargs, val=ProxyOpera.DbOperation())
122 if hasattr(self,
'config_obj')
and self.config_obj:
124 creator=ParseUtil.fieldExist(
125 self.config_obj,
'creator', raise_exception=
True),
126 POOL=
None if 'POOL' not in kwargs.keys(
127 )
else kwargs[
'POOL'],
128 **ParseUtil.fieldExist(self.config_obj,
'kw', raise_exception=
True))
130 ALog.log_error(
'`config_obj` is missing', AttributeError, LogObject=self.log_obj, raise_exception=
True)
140 return AOrm(repository=self)
159 将所有结果封装成POJO对象集合并返回数据
169 SELECT user_name FROM `user`
171 即可参与仅解析user_name为主的POJO对象
173 :param args:需要参与解析的字段名
176 将所有结果封装成POJO对象集合并返回数据
180 name = str(uuid.uuid1())
184 'func': self.operation.__find_by_field__,
185 '__task_uuid__': name,
190 result = self.operation.
start(*args, **kwargs)
192 self.
result = self.serializer(instance=self.instance, base_data=result)
205 result = self.find_many(**kwargs)
211 :param kwargs:包含所有参数:
221 :return 返回使用find_many()的结果种第一条
238 :param kwargs:包含所有参数:
248 :return 将所有数据封装成POJO对象并返回
252 name = str(uuid.uuid1())
255 kwargs[
'func'] = self.operation.__find_many__
256 kwargs[
'__task_uuid__'] = name
257 kwargs[
't_local'] = self
258 result = self.operation.
start(**kwargs)
260 self.
result = self.serializer(instance=self.instance, base_data=result)
270 - 请尽量使用find_many(sql)操作
272 :param kwargs:包含所有参数:
279 name = str(uuid.uuid1())
282 kwargs[
'func'] = self.operation.__find_sql__
283 kwargs[
'__task_uuid__'] = name
284 kwargs[
't_local'] = self
285 result = self.operation.
start(**kwargs)
287 self.
result = self.serializer(instance=self.instance, base_data=result)
295 :param key:主键,where的参考数据
299 for k, v
in self._fields.items():
300 if hasattr(v,
"primary_key")
and getattr(v,
'primary_key'):
303 name = str(uuid.uuid1())
306 'func': self.operation.__update__,
307 '__task_uuid__': name,
320 :param key:主键,where的参考数据
324 for k, v
in self._fields.items():
325 if hasattr(v,
"primary_key")
and getattr(v,
'primary_key'):
328 name = str(uuid.uuid1())
331 'func': self.operation.__remove__,
332 '__task_uuid__': name,
340 def save(self, *args, **kwargs):
344 kwargs[
'pojo'] = self
345 return self.
create(*args, **kwargs)
351 :param kwargs:包含所有参数:
353 last_id:是否需要返回最后一行数据,默认False
354 :return:rowcount,last_id if last_id=True
357 kwargs[
'pojo'] = pojo
358 name = str(uuid.uuid1())
360 kwargs[
'func'] = self.operation.__insert__
361 kwargs[
'__task_uuid__'] = name
362 kwargs[
't_local'] = self
370 不建议多次创建对象,建议使用 pojo.copy()来生成对象
372 obj = copy.copy(self)
373 [setattr(obj, k, v)
for k, v
in kwargs.items()]
376 def execute_sql(self, sql, params=None, mode=EX_MODEL.SELECT, **kwargs):
379 :param params:防止sql注入的参数
380 :param mode:查询模式,默认使用SELECT,使用aestate.work.Modes.EX_MODEL枚举修改执行的sql类型
381 :param kwargs:其他需要的参数
383 kwargs[
'print_sql'] =
True if 'print_sql' not in kwargs.keys()
else kwargs[
'print_sql']
384 if mode
is None or mode == EX_MODEL.SELECT:
385 return self.
db_util.select(sql=sql, params=params, **kwargs)
387 kwargs[
'last_id'] =
True if 'last_id' not in kwargs.keys()
else kwargs[
'last_id']
388 return self.
db_util.insert(sql=sql, params=params, **kwargs)
390 def foreign_key(self, cls, key_name, field_name=None, data=None, operation=None):
397 >>> from apps.fontend.models import Label, SmLabel
398 >>> smlabel = SmLabel()
401 >>> label.foreign_key(smlabel.copy, 'label_id')
402 >>> datas = label.datas
406 >>> page = int(requests.GET['page']) \
407 ... if 'page' in requests.GET.keys() \
410 >>> sm_label_list = sm_label.orm.filter(id=pk)
411 >>> sm_label.foreign_key(
413 ... key_name='label_id',
414 ... field_name="need_list",
415 ... datas=sm_label_list,
416 ... operation=lambda dt, i: need.orm
418 ... .where(label_id=dt[i].id)
419 ... .limit((page - 1) * PAGE_SIZE, PAGE_SIZE)
422 >>> need_list = sm_label.datas
423 >>> return Result.success(data=need_list.to_dict())
426 :param cls:目标外键的类,注意不是对象,是类
427 :param key_name:外键的id
428 :param field_name:保存进去的字段名字,默认以表名命名
429 :param data:使用已有的数据作为外键
430 :param operation:自定义操作
433 if field_name
is None:
434 name = child_obj.get_tb_name()
438 for i
in range(len(self.
datas)):
440 data = child_obj.orm.filter(**{key_name: self.
datas[i].id})
442 data = operation(self.
datas, i)
443 self.
datas[i].add_field(name, data.to_dict())