Skip to content

asynchronoust/kbengine-orm

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 

Repository files navigation

kbengine-orm

mysql orm for kbengine

对kbegnine中的mysql操作,简单做了一下ORM封装

feature

  • 支持查找 find
  • 支持插入 insert
  • 支持批量插入 insert many
  • 支持删除 delete
  • 支持更新 update
  • 支持存在更新,不存在插入功能 dup_key_update
  • 支持的过滤等操作指令有:
    • gt, gte:大于,大于等于
    • lt, lte:小于,小于等于
    • eq:相等
    • neq:不相等
    • order_by:排序
    • limit:返回行数限制
    • in:in操作

Quick start

来看个例子

from dbs.db_base import BaseModel
from dbs.columns import INT
import time

class TestModel(BaseModel):

    __table__ = "table_name"
    __fields__ = {
        "phone": INT,
        "code": INT,
        "time": INT,
        "enable": INT,
    }

    def __init__(self):
        super(TestModel, self).__init__()
    
    def find_phone(self):
        # 查找过滤,可以链式调用
        self.dml.eq("phone", "1111").lt("time", 1111).limit(10)
        self.dml.find(["phone", "code"], self._find_phone_cb)

    def _find_phone_cb(result_list, error):
        """
        result_list: 是一个list,元素是字典,每个字典是要查询的字段的key value值
        这个例子中就是 [{"phone": "111", "code": 1}, {"phone": "222", "code": 2}]
        """
        pass

    def upsert_sms_code(self, phone, code, time, cb):
        data = {
            "phone": phone,
            "code": code,
            "time": time,
            "enable": 1
        }
        # 如果存在就更新,不存在就插入,使用了mysql的dup_key_update功能
        self.dml.insert(data, cb, dup_key_update=True, update_data=data)

    def set_v_code_used(self, phone):
        data = {
            "enable": 2
        }
        self.dml.eq("phone", phone).update(data)

    def delete_row(self, phone):
        self.dml.eq("phone", phone)
        self.dml.delete()

使用步骤:

  • 创建一个model类,继承BaseModel
  • 写表的name, __table__
  • 写表的字段以及类型,__fields__
  • 这样类可以使用 self.dml实例,这是一个DML实例,可以通过此实例进行Mysql的各种相关的操作,可以看看此类的源码了解更多
  • 另外,如果有比较复杂的sql语句,没有接口可以满足,可以使用execute_custom_sql函数

在kbengine中使用,就将dbs目录拷贝到server_common下面即可

完善与改进

  • 现在这个功能封装很简单,和市面上的开源的ORM框架没得比,我这只提供简单的mysql操作,对于kbengine这样面向对象的写代码方式来说大多数是够用了
  • 现在kbengine支持多数据库,此库还不支持选择数据库,还是使用default数据库