文章目录
SimpySql简单实例安装初始化创建 Model
数据添加添加单条数据添加多条数据获取插入的自增ID
更新更新数据自增自减
删除查询查询单条数据(first)查询多条数据(get)条件查询多添件查询排序偏移自定义查询字段分组 group byHaving查询字查询tablename 别名join查询Union查询原生SQL
返回数据格式数据库事务多库切换数据库日志
Github
SimpySql
简单实例
ModelDemo
().where
('id', 4).select
('id', 'name').take
(5).get
()
安装
pip install simpysql
初始化
您需要在项目根路径处创建一个.env文件,内容如下:
[default
]
DB_HOST
=127.0.0.1
DB_PORT
=3306
DB_NAME
=test_db1
DB_USER
=root
DB_PASSWORD
=123456
DB_CHARSET
=utf8mb4
LOG_DIR
=/home
/logs
/python
/
[test_db2
]
DB_HOST
=127.0.0.1
DB_PORT
=3306
DB_NAME
=test_db2
DB_USER
=root
DB_PASSWORD
=123456
DB_CHARSET
=utf8mb4
创建 Model
创建数据库Model并继承DBModel,如下所示:
from simpysql
.DBModel
import DBModel
class ModelDemo(DBModel
):
__basepath__
= '/home/project/'
__tablename__
= 'lh_test'
__create_time__
= 'create_time'
__update_time__
= 'update_time'
columns
= [
'id',
'name',
'token_name',
'status',
'create_time',
'update_time',
]
数据添加
添加单条数据
ModelDemo
().create
({'name': "haha1", 'token_name': 'haha124'})
添加多条数据
ModelDemo
().create
([{'name': "haha1", 'token_name': 'haha124'}, {'name':"haha2", 'token_name': 'haha125'}])
获取插入的自增ID
id = ModelDemo
().create
({'name': "haha1", 'token_name': 'haha124'}).lastid
()
更新
更新数据
ModelDemo
().where
('id', 1).update
({'name':"hehe", 'token_name': 'hehe123'})
自增
ModelDemo
().where
('id', 1).increment
('status')
ModelDemo
().where
('id', 1).increment
('status', 5)
自减
ModelDemo
().where
('id', 1).decrement
('status')
ModelDemo
().where
('id', 1).decrement
('status', 5)
删除
ModelDemo
().where
('id', 4).delete
()
查询
查询单条数据(first)
data
= ModelDemo
().where
('id', 4).first
()
data
= ModelDemo
().where
('id', '=', 4).first
()
return data
: {'id':4, 'name':...}
查询多条数据(get)
data
= ModelDemo
().where
('id', '>', 4).take
(5).get
()
return data
: [{'id':5, 'name':...},{}...]
条件查询
data
= ModelDemo
().where
('id', '>=', 4).get
()
data
= ModelDemo
().where
('id', '>', 4).get
()
data
= ModelDemo
().where
('id', '<', 4).get
()
data
= ModelDemo
().where
('id', '<=', 4).get
()
data
= ModelDemo
().where
('id', '!=', 4).get
()
data
= ModelDemo
().where
('id', 'in', [1, 2]).get
()
data
= ModelDemo
().where
('id', 'not in', [1, 2]).get
()
data
= ModelDemo
().where
('id', 'between', [1, 2]).get
()
data
= ModelDemo
().where
('id', 'not between', [1, 2]).get
()
data
= ModelDemo
().where
('name', 'like', '%Tether%').get
()
data
= ModelDemo
().where
('name', 'not like', '%Tether%').get
()
data
= ModelDemo
().where
('id', 62).orwhere
('name', 'haha').get
()
data
= ModelDemo
().where
('id', 62).orwhere
('name', 'like', 'haha%').get
()
data
= ModelDemo
().where
('id', 62).orwhere
([['name', 'like', 'haha%'], ['create_time', '<', 1555123210]]).get
()
多添件查询
data
= ModelDemo
().where
({'id': 1, 'name': 'hehe'}).get
()
data
= ModelDemo
().where
('id', 1).where
('name', 'like', 'hehe%').get
()
排序
data
= ModelDemo
().where
('id', '>', 0).orderby
('id', 'desc').orderby
('status').get
()
偏移
data
= ModelDemo
().where
('id', '>', 100).offset
(10).take
(5).get
()
自定义查询字段
data
= ModelDemo
().select
('id', 'name').take
(5).get
()
data
= ModelDemo
().select
('min(id) as minid').first
()
分组 group by
data
= ModelDemo
().select
('count(*) as num', 'name').groupby
('name').get
()
Having查询
data
= ModelDemo
().select
('count(*) as num', 'name').groupby
('name').having
('num', '>', 2).get
()
字查询
data
= ModelDemo
().where
('id', ModelDemo
().select
('max(id)')).first
()
data
= ModelDemo
().where
('id', 'in', ModelDemo
().where
('id', '<=', 50).select
('id')).get
()
tablename 别名
data
= ModelDemo
('a').select
('a.id', 'a.name').first
()
join查询
data
= ModelDemo
('a').where
('a.id', 42).leftjoin
(ModelDemo
('b').on
('a.id', '=', 'b.id')).select
('a.id', 'b.name').get
()
data
= ModelDemo
('a').where
('a.id', 42).rightjoin
(ModelDemo
('b').on
('a.id', '=', 'b.id')).select
('a.id', 'b.name').get
()
data
= ModelDemo
('a').where
('a.id', 42).innerjoin
(ModelDemo
('b').on
('a.id', '=', 'b.id')).select
('a.id', 'b.name').get
()
Union查询
data
= ModelDemo
().where
('id', 42).unionall
(ModelDemo
().where
('id', '=', 58)).get
()
data
= ModelDemo
().where
('id', 42).union
(ModelDemo
().where
('id', '=', 58)).get
()
原生SQL
sql
= 'select count(*) as num,name from lh_test group by name'
data
= ModelDemo
().execute
(sql
)
返回数据格式
data
= ModelDemo
().where
('id', '=', 1).select
('id').first
()
data
= ModelDemo
().where
('id', '=', 1).select
('id').get
()
data
= ModelDemo
().where
('id', 'in', [1,2,3]).select
('id', 'name').lists
('id')
data
= ModelDemo
().where
('id', 'in', [1,2]).select
('id', 'name').lists
(['id', 'name'])
data
= ModelDemo
().select
('id', 'name', 'status').data
()
数据库事务
方法
1:
def demo():
ModelDemo
().where
('id', 42).update
({'name': "44", 'token_name': '444'})
ModelDemo
().where
('id', 43).update
({'name': "44", 'token_name': '444'})
return True
data
= ModelDemo
().transaction
(demo
)
方法
2:
@ModelDemo
.transaction
def demo(id):
ModelDemo
().where
('id', id).update
({'name': "44", 'token_name': '111'})
ModelDemo
().where
('id', 43).update
({'name': "44", 'token_name': '111'})
return True
demo
(42)
多库切换
在model中设置__database__属性为
.env中的数据库配置名称
__database__
= 'test_db2'
在代码中设置
ModelDemo
().database
('test_db2').where
('id', '>', 40).first
()
数据库日志
在
.env 文件中开启LOG_DIR设置捷即可
:
LOG_DIR
=/home
/logs
/python
/