# ladb **Repository Path**: liveup_admin/ladb ## Basic Information - **Project Name**: ladb - **Description**: 模仿laravel的链式操作,没有完全复制 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-03-22 - **Last Updated**: 2025-05-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## PyMySQL自定义封装操作数据库。最开始是参考Flask - LaDb.table。这里已经不是为了像它们,是为了方便灵活,浓缩了基本操作,提高效率。 本封装库模仿Laravel,ThinkPHP框架的ORM链式操作。 Python版本要求Python3.x版本。 ### 一、PyMySQL介绍 PyMySQL是在 Python3.x 版本中用于连接 MySQL 服务器的一个库。当前类基于PyMysql。 ### 二、PyMySQL安装 ``` pip3 install pymysql ``` ### 三、LaDb.table方法介绍 #### 执行sql语句 ##### query(sql, tuple_value) |参数|必填|说明| |---|---|---| |sql|必填|需要执行的sql语句| |tuple_value|非必填|需要替换占位符的元组| > 该方法仅能用于查询,内置fetchall()方法,返回值是list列表数据组 ``` 例1:res = LaDb.query('select * from user') 例2:res = LaDb.query('select * from user where id = %s', (7,)) ``` #### 新增数据 ##### insert(data,on_conflict='ignore') |参数|必填|说明| |---|---|---| |data|必填|新增数据,字典类型| |on_conflict|可选|冲突处理模式,默认'ignore'重复忽略;可选'update'重复更新;其他,直接插入 > 参数data必填,要求是dict字典数据组
> 返回值:1.单次插入数据时返回新增的数据的主键,2.批量插入数据时返回成功的行数 > 当前函数已经做了较大的改动了,提高通用场景的效率。2025-03 1.单个数据插入,直接传入dict字典数据 ``` LaDb.table('user').insert({'username': '张三', 'password': '123456'}) ``` 2.批量数据插入,传入list列表数据组 ``` LaDb.table('user').insert([{'username': '张三', 'password': '123456'}, {'username': '李四', 'password': '123456'}]) ``` #### 更新数据 ##### update(data) |参数|必填|说明| |---|---|---| |data|必填|更新数据,字典类型| > 参数data必填,要求是dict字典
> 返回值:bool值 ``` LaDb.table('user').where('id', 1).where('username', '张三').update({'username': '王五'}) ``` #### 单条更新插入 ##### updateOrInsert(where,data) |参数|必填|说明| |---|---|---| |where|必填|同where()条件,字典类型| |data|必填|更新数据,字典类型| ``` LaDb.table('user').updateOrInsert({'id':1},{'username':'王五'}) ``` #### 删除数据 ##### delete() > 和where()一起调用(查询方法里会介绍)。为了避免直接删除所有数据,这个Delete必须和where()一起操作。
> 返回值:bool值 ``` LaDb.table('user').where('id', 1).delete() ``` #### 查询数据 ##### get() > 查询数据列表,和多个方法一起调用(下面会依次介绍)
> 返回值:数据列表list ``` LaDb.table('user').get() ``` ##### first() > 查询单条数据,和多个方法一起调用(下面会依次介绍)
> 返回值:单个数据字典dict ``` LaDb.table('user').first() ``` ##### value(field) |参数|必填|说明|举例| |---|---|---|---| |field|必填|查询字段|value('username')| > 查询单条数据,和多个方法一起调用(下面一一介绍)
> 返回值:返回单个查询字段 ``` LaDb.table('user').value('username') ``` ##### where(where=None, value=None, method='and') |参数|必填|说明| |---|---|---| |where|非必填|查询条件,接收字典和字符串类型,为字符串时value必填且当前值为数据库字段| |value|非必填|查询字段值| |method|非必填|字段连接方式,and或者or| > 参数类似TP5的where,参数where可以接受dict字典和str字符串,是操作数据库的主要方法之一,使用方式如下: 1.多个where条件同时使用 ``` LaDb.table('user').where('username', '小明').where('password', '123456').get() ``` 2.单个where条件使用 ``` LaDb.table('user').where({'username': '小明', 'password': '123456'}).get() ``` 3.单个where和list同时使用多条件,例如:{'字段': ['比较符号', '查询值', 'and|or']},多个list时最后一个list的且或不计入比较 ``` LaDb.table('user').where({'username': ['!=', '小明', 'or'], 'password': ['=', '123456']}).get() ``` ##### fields(params) |参数|必填|说明|举例| |---|---|---|---| |params|必填|查询字段,可是字符串或是字典|fields('username')| > 查询字段,params为需要查询的字段,可以是字符串或是字典 ``` 例1:LaDb.table('user').fields('username').get() 例2:LaDb.table('user').fields('username,password').get() 例3:LaDb.table('user').fields(['username', 'password']).get() ``` ##### page(page=1, rows=10) |参数|必填|说明| |---|---|---| |page|非必填|分页页数| |rows|非必填|分页行数| > 数据分页,使用页面分页时会用到 ``` LaDb.table('user').page(1, 10).get() ``` ##### groupBy(param) |参数|必填|说明| |---|---|---| |param|非必填|分组字段| > 数据归组 ``` LaDb.table('user').groupBy('username').get() ``` ##### orderBy(param) |参数|必填|说明| |---|---|---| |param|非必填|排序字段| > 数据排序,asc正序,desc倒序 ``` LaDb.table('user').orderBy('id desc').get() ``` #### 配置说明 > 需要手动配置一个conf__g.py ``` # -*- coding: utf-8 -*- # conf__g.py class Config: mysql = { 'host': '服务器地址', 'dbname': '数据库名称', 'username': '用户名', 'password': '密码', 'port': 3306, 'pre': '', 'charset': 'utf8' } ```