github.com/jincm/wesharechain@v0.0.0-20210122032815-1537409ce26a/server/block/db/api.py (about)

     1  #!/usr/bin/python
     2  # -*- coding: utf-8 -*-
     3  
     4  from sqlalchemy import or_, and_
     5  from db import models
     6  from db.base import *
     7  from util import common_util
     8  
     9  
    10  def model_query(model, session=None, order=False, read_deleted="no", desc=True, *args, **kwargs):
    11      """
    12      :param model:
    13      :param session: if present, the session to use
    14      """
    15      session = session or get_session()
    16      query = session.query(model, *args)
    17  
    18      if read_deleted == "no":
    19          query = query.filter_by(deleted=False)
    20  
    21      filter_dict = {}
    22      for key, value in kwargs.items():
    23          if isinstance(value, (list, tuple, set, frozenset)):
    24              column_attr = getattr(model, key)
    25              query = query.filter(column_attr.in_(value))
    26          else:
    27              filter_dict[key] = value
    28  
    29      if filter_dict:
    30          query = query.filter_by(**filter_dict)
    31      if order:
    32          if desc:
    33              query = query.order_by(model.create_time.desc())
    34          else:
    35              query = query.order_by(model.create_time)
    36  
    37      return query
    38  
    39  def model_create(model, values):
    40      if not values.get('id'):
    41          values['id'] = common_util.create_id()
    42      ref = model()
    43      ref.update(values)
    44      session = get_session()
    45      with session.begin():
    46          ref.save(session)
    47          return values
    48  
    49  def model_batch_create(model, lists):
    50      """
    51      批量创建
    52      :param lists: 带批量创建的数组
    53      :return:
    54      """
    55      session = get_session()
    56      with session.begin():
    57          try:
    58              for data in lists:
    59                  if not data.get('id'):
    60                      data['id'] = common_util.create_id()  # str(uuid.uuid4())
    61                  ref = model()
    62                  ref.update(data)
    63                  session.add(ref)
    64              session.commit()
    65          except Exception as ex:
    66              session.rollback()
    67              raise ex
    68  
    69  def model_update(model, id, values):
    70      query = model_query(model).filter_by(id=id)
    71      result = query.update(values)
    72      if not result:
    73          return None
    74      return result
    75  
    76  def model_get(model, id):
    77      query = model_query(model)
    78      result = query.filter_by(id=id).first()
    79      if not result:
    80          return None
    81      return result
    82  
    83  def model_list(model, offset=0, limit=1000, **filters):
    84      query = model_query(model, order=True, **filters)
    85      if offset:
    86          query = query.offset(offset)
    87      if limit:
    88          query = query.limit(limit)
    89      return query.all()
    90  
    91  def model_count(model, **filters):
    92      query = model_query(model, **filters)
    93      return query.count()
    94  
    95  def model_deleted(model, id):
    96      session = get_session()
    97      with session.begin():
    98          query = model_query(model, session=session, id=id)
    99          query.update({
   100              "deleted": True
   101          },
   102          synchronize_session=False)
   103  
   104