2 from datetime
import datetime
4 from typing
import List, Tuple
17 def parse_main(self, *args, to_str=False, symbol='%s', left='`', right='`', **kwargs):
20 将属性格式设置为:['`a`,','`b`,','`c`']
21 :param to_str:是否转成str格式
29 is_field = kwargs[
'is_field']
if 'is_field' in kwargs.keys()
else False
33 value = others.conversion_types(value)
36 fields.append(f
'{left}{symbol}{right},' % (str(value)))
38 fields.append(f
'{symbol},' % (str(value)))
40 fields.append(value
if not ParseUtil.is_default(value)
else None)
42 fields[len(fields) - 1] = fields[len(fields) - 1].replace(
',',
'')
55 如果 is_field=True `field` [field]
59 INSERT INTO `demo` (这里的就是键) VALUES ('','','','');
63 if 'is_field' not in kwargs.keys():
64 kwargs[
'is_field'] =
True
65 fields = self.
parse_main(*args, to_str=
True, **kwargs)
70 kes = [f.update_str, f.left_subscript, pojo.__table_name__, f.right_subscript, f.set_str]
73 if i != key
and not pojo.getFields()[i].auto_time:
74 kes.append(f
'`{i}`=%s')
76 if pojo.getFields()[i].update_auto_time:
77 params.append(datetime.now())
79 params.append(getattr(pojo, i))
81 kes.append(f.where_str)
82 kes.append(f
'`{key}`=%s')
83 params.append(getattr(pojo, key))
89 kes = [f.delete_str, f.from_str, f.left_subscript, pojo.__table_name__, f.right_subscript, f.where_str]
91 kes.append(f
'`{key}`=%s')
92 params.append(getattr(pojo, key))
99 INSERT INTO `demo` (`index`, `title`, `selects`, `success`) VALUES (这里的就是值);
106 def parse_insert(self, keys, values, __table_name__, insert_str, values_str, symbol='%s',
107 sql_format='%s %s (%s)%s(%s)
'):
112 values:包含了所有需要用到的字段的值
114 insert_str:insert的字符串
116 symbol:格式化方式,以`%s`作为匿名符号
121 hides_value = [f
'{symbol},' for i
in range(len(values))]
123 end = hides_value[len(hides_value) - 1]
124 hides_value[len(hides_value) - 1] = end[0: len(end) - 1]
126 value =
''.join(hides_value)
129 str(__table_name__), fields, values_str, value
134 [args.append(i)
for i
in values]
142 INSERT INTO `__table_name__`(`title`,'selects') VALUE ('','')
145 :param __table_name__:表名
146 :param insert_str:insert的sql方言
147 :param values_str:values的sql方言
151 ParseUtil.fieldExist(pojo,
'fields', raise_exception=
True)
157 keys_c, cp_v = ParseUtil.parse_pojo(pojo)
161 return self.
parse_insert(keys_copy, cp_value, __table_name__, insert_str=insert_str,
162 values_str=values_str)
171 values = [getattr(pojo, v)
for v
in keys]
172 for i, j
in enumerate(values):
173 if j
is not None and not ParseUtil.is_default(j):
174 keys_copy.append(keys[i])
177 return keys_copy, cp_value
186 :param instance:参与解析的对象
190 part_obj = copy.copy(instance)
191 for key, value
in data.items():
192 setattr(part_obj, key, value)
197 """作者:CACode 最后编辑于2021/4/12
217 conf_obj = kwargs[
'config_obj']
218 if 'last_id' not in kwargs.keys():
219 c_dict = conf_obj.get_dict()
220 if 'last_id' in c_dict.keys():
221 kwargs[
'last_id'] = c_dict[
'last_id']
223 kwargs[
'last_id'] =
False
239 conf_obj = kwargs[
'config_obj']
240 if 'print_sql' not in kwargs.keys():
241 c_dict = conf_obj.get_dict()
242 if 'print_sql' in c_dict.keys():
243 kwargs[
'print_sql'] = c_dict[
'print_sql']
245 kwargs[
'print_sql'] =
False
249 def case_name(text, rep_text='_', lower=True, upper=False):
251 将驼峰文本改为使用指定符号分割的字符串表达形式并全部小写
253 :param rep_text:在大写文本后面追加的字符串
254 :param lower:是否需要全部小写
255 :param upper:是否需要全部大写
258 for index, char
in enumerate(text):
259 if char.isupper()
and index != 0:
264 return "".join(lst).lower()
266 return "".join(lst).upper()
276 t_v = __val.__class__.__base__
278 return __val.default
is None
287 为了方便提高拓展性可解耦,框架内部务必使用此
289 方法或者set_field_compulsory()为操作管理类提供对象
292 if not hasattr(obj, key):
293 setattr(obj, key, value)
298 如果键存在于data中,为obj插入该值,反之插入val
300 if key
in data.keys():
301 setattr(obj, key, data[key])
303 setattr(obj, key, val)
306 def fieldExist(obj: object, field: str, el=
None, raise_exception=
False) -> object:
308 在对象中获取一个字段的值,如果这个字段不存在,则将值设置为`el`
310 if isinstance(obj, dict):
311 if field
in obj.keys():
315 raise ALog.log_error(
316 msg=f
'the key of `{field}` cannot be found in the `{obj.__class__.__name__}`',
318 raise_exception=
True)
322 if hasattr(obj, field):
323 return getattr(obj, field)
326 raise ALog.log_error(
327 msg=f
'the key of `{field}` cannot be found in the `{obj.__class__.__name__}`',
329 raise_exception=
True)
338 for pojo
in pojo_many:
339 keys_c, cp_v = ParseUtil.parse_pojo(pojo)
340 cp_value.append(tuple(cp_v))
346 for key, value
in kwargs.items():
347 ParseUtil.set_field_compulsory(obj=obj, key=key, data=kwargs, val=value)
353 fields = instance.getFields()
364 _instance_lock = threading.RLock()
490 return '>> << == <= >= != - + / * %'.split(
' ')
493 instance = Singleton.createObject(cls)
499 def extra(self, field) -> Tuple[bool, object]:
502 "Field":
lambda x: x[
'Field'] == field.name,
504 lambda x: x[
"Type"] == field.t_type
505 if field.length
is None else
506 f
"{field.t_type}({field.length})"
507 if field.d_point
is None else
508 f
"{field.t_type}({field.length},{field.d_point})",
526 'Type': field.t_type,
527 'Null': field.is_null,
528 'Key': field.primary_key,
529 'Default': field.default,
530 'Extra': field.comment,
536 if field.name == i[
'Field']:
541 return False, f
"Check failed:{ft}"
542 self.
R.remove(target)
544 for k, v
in ft.items():
550 self.
R = self.
instance.execute_sql(f
"DESC `{self.instance.get_tb_name()}`")
551 for k, v
in self.
instance.getFields().items():
553 ALog.log(f[1], obj=self, task_name=
"Check") \
555 ALog.log_error(f[1], obj=self, task_name=
"Check")
558 ALog.log_error(f
"Extra field:{self.R}", obj=self, task_name=
"Check")
563 default_parse =
lambda x:
"AUTO_INCREMENT" \
564 if x.autoField
else 'DEFAULT CURRENT_TIMESTAMP' \
565 if x.auto_time
else 'DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP' \
566 if x.update_auto_time
else f
"CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '{x.default}'" \
567 if isinstance(x.default, str)
else f
"DEFAULT '{x.default}'" \
568 if isinstance(x.default, int)
else ""
570 type_parse =
lambda x: x.t_type \
571 if x.length
is None else "%s(%s,%s)" % (x.t_type, x.length, x.d_point) \
572 if x.d_point
is not None and x.length
is not None else "%s(%s)" % (x.t_type, x.length) \
573 if x.length
is not None else x.t_type
574 for k, v
in self.
instance._fields.items():
581 'NULL' if v.is_null
else 'NOT NULL'
587 sql =
"CREATE TABLE IF NOT EXISTS `%s` ( %s %s) ENGINE=InnoDB DEFAULT CHARSET=utf8;" % \
588 (self.
instance.get_tb_name(),
''.join(FIELDS),
"PRIMARY KEY (`%s`)" % PRIMARYKEY)