Aestate
ExecuteSql.py
Go to the documentation of this file.
1 import sys
2 
3 from aestate.exception import MySqlErrorTest
4 from aestate.util.Log import ALog
5 from aestate.opera.DBPool.pooled_db import PooledDB
6 
7 
8 def parse_kwa(db, **kwargs):
9  """
10  解析并执行sql
11 
12  :param db:db_util对象
13  :param kwargs:包含所有参数:
14  last_id:是否需要返回最后一行数据,默认False
15  sql:处理过并加上%s的sql语句
16  params:需要填充的字段
17  print_sql:是否打印sql语句
18  many:是否有多个
19  """
20 
21  try:
22  cursor = db.cursor()
23  # 是否执行多条sql
24  many_flay = 'many' in kwargs.keys() and kwargs['many']
25  if 'print_sql' in kwargs.keys() and kwargs['print_sql'] is True:
26  _l = sys._getframe().f_back.f_lineno
27  msg = f'{kwargs["sql"]} - many=True' if many_flay else kwargs['sql']
28  ALog.log(obj=db, line=_l, task_name='ASQL', msg=msg,
29  LogObject=kwargs['log_obj'] if 'log_obj' in kwargs.keys() else None)
30  if many_flay:
31  cursor.executemany(kwargs['sql'], kwargs['params'])
32  else:
33  if 'params' in kwargs and kwargs['params']:
34  cursor.execute(kwargs['sql'], tuple(kwargs['params']))
35  else:
36  cursor.execute(kwargs['sql'])
37  # try:
38  # CACodeLog.log(obj=db, line=_l, task_name='Print Sql', msg=cursor._executed)
39  # except:
40  # CACodeLog.log(obj=db, line=_l, task_name='Print Sql', msg=msg)
41  return cursor
42  except Exception as e:
43  tb = e.__traceback__
44 
45  db.rollback()
46  mysql_err = MySqlErrorTest(e)
47  mysql_err.ver()
48  mysql_err.raise_exception()
49 
50 
52  def __init__(self, *args, **kwargs):
53  if 'POOL' not in kwargs or kwargs['POOL'] is None:
54  self.POOL = self
55  if 'POOL' in kwargs.keys():
56  kwargs.pop('POOL')
57 
58  super(Db_opera, self).__init__(*args, **kwargs)
59 
60  def get_conn(self):
61  """
62  获取数据库连接池
63  :return:
64  """
65  return self.POOL.connection()
66 
67  def select(self, **kwargs):
68  """
69  查找多个
70  :param kwargs:包含所有参数:
71  last_id:是否需要返回最后一行数据,默认False
72  sql:处理过并加上%s的sql语句
73  params:需要填充的字段
74  print_sql:是否打印sql语句
75  :return:
76  """
77  db = self.get_conn()
78  try:
79  cursor = parse_kwa(db=db, **kwargs)
80  # 列名
81  col = cursor.description
82  data = cursor.fetchall()
83  db.close()
84  _result = []
85  for data_index, data_value in enumerate(data):
86  _messy = {}
87  for item_index, item_value in enumerate(data_value):
88  _messy[col[item_index][0]] = item_value
89  _result.append(_messy)
90  return _result
91  except Exception as e:
92  db.rollback()
93  ALog.log_error(
94  msg='The pojo object has not been initialized yet, and no configuration items have been obtained',
95  obj=e, LogObject=kwargs['log_obj'] if 'log_obj' in kwargs.keys() else None, raise_exception=True)
96  finally:
97  db.close()
98 
99  def insert(self, many=False, **kwargs):
100  """
101  执行插入语句
102  :param kwargs:包含所有参数:
103  last_id:是否需要返回最后一行数据,默认False
104  sql:处理过并加上%s的sql语句
105  params:需要填充的字段
106  :param many:是否为多行执行
107  """
108  db = self.get_conn()
109  try:
110  cursor = parse_kwa(db=db, many=many, **kwargs)
111  db.commit()
112  # 受影响行数
113  rowcount = cursor.rowcount
114  # 返回受影响行数
115  if kwargs['last_id']:
116  return rowcount, cursor.lastrowid
117  else:
118  return rowcount
119  except Exception as e:
120  db.rollback()
121  ALog.log_error(
122  msg='The pojo object has not been initialized yet, and no configuration items have been obtained',
123  obj=e, LogObject=kwargs['log_obj'] if 'log_obj' in kwargs.keys() else None, raise_exception=True)
124  finally:
125  db.close()
126 
127  def update(self, **kwargs):
128  """
129  执行更新语句
130  :param kwargs:包含所有参数:
131  last_id:是否需要返回最后一行数据,默认False
132  sql:处理过并加上%s的sql语句
133  params:需要填充的字段
134  """
135  return self.insert(**kwargs)
136 
137  def delete(self, **kwargs):
138  """
139  执行删除语句
140  :param kwargs:包含所有参数:
141  last_id:是否需要返回最后一行数据,默认False
142  sql:处理过并加上%s的sql语句
143  params:需要填充的字段
144  """
145  self.insert(**kwargs)
aestate.work.sql.ExecuteSql.parse_kwa
def parse_kwa(db, **kwargs)
Definition: ExecuteSql.py:8
aestate.work.sql.ExecuteSql.Db_opera.get_conn
def get_conn(self)
Definition: ExecuteSql.py:60
aestate.opera.DBPool.pooled_db
Definition: pooled_db.py:1
aestate.work.sql.ExecuteSql.Db_opera.select
def select(self, **kwargs)
Definition: ExecuteSql.py:67
aestate.work.sql.ExecuteSql.Db_opera
Definition: ExecuteSql.py:51
aestate.opera.DBPool.pooled_db.PooledDB.connection
def connection(self, shareable=True)
Definition: pooled_db.py:154
aestate.work.sql.ExecuteSql.Db_opera.insert
def insert(self, many=False, **kwargs)
Definition: ExecuteSql.py:99
aestate.work.sql.ExecuteSql.Db_opera.delete
def delete(self, **kwargs)
Definition: ExecuteSql.py:137
aestate.util.Log
Definition: Log.py:1
aestate.exception
Definition: __init__.py:1
aestate.work.sql.ExecuteSql.Db_opera.__init__
def __init__(self, *args, **kwargs)
Definition: ExecuteSql.py:52
aestate.work.sql.ExecuteSql.Db_opera.update
def update(self, **kwargs)
Definition: ExecuteSql.py:127
aestate.opera.DBPool.pooled_db.PooledDB
Definition: pooled_db.py:23
aestate.work.sql.ExecuteSql.Db_opera.POOL
POOL
Definition: ExecuteSql.py:54
aestate.exception.MySqlErrorTest
Definition: __init__.py:80