# 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'
}
```