2.3 KiB
2.3 KiB
使用sqlor模块操作数据库
日期数据,在数据库中用date类型,日期格式:YYYY-MM-DD 时间戳数据,在数据库中用timestamp类型,格式:YYYY-MM-DD hh:mm:ss.999 sor.R() sor.sqlExe() 的select语句 如果ns中有'page'属性,返回数据格式如下 { "total" # 查询结果总记录数 "rows": page指定的页数据, 缺省每页返回80条记录,pagerows属性可设置每页记录数 } 否则返回全部记录的数组
from sqlor.dbpools import DBPools
from ahserver.serverenv import ServerEnv
# 假设当前模块名称为"mymodule"
async def subcoro(sor, pid):
sql = "select * from appcoodes_kw where parentid=${pid}$"
r = await sor.sqlExe(sql, {'pid': pid})
return r
async def sqlor_op():
db = DBPools()
env = ServerEnv()
dbname = env.get_module_dbname()
async with db.sqlorContext(dbname) as sor:
# 事务中,如果代码或sql失败全部滚回,正常结束自动提交
id = env.uuid()
# 执行SQL返回记录数组
sql="select * from user where name = ${name}$ and gender = ${gender}$"
ns = {'name': 'Make', 'gender': '0'}
recs = await sor.sqlExe(sql, ns)
## recs为[]或返回的记录数组
# 执行SQL返回分页数据
sql="select * from user where name = ${name}$ and gender = ${gender}$"
ns = {'name': 'Make', 'gender': '0', 'page': 2}
recs = await sor.sqlExe(sql, ns)
## recs是一个DictObject对象实例,转字典为:{
"total": 12222,
"rows": [ ... ]
}
# 执行其他DML,DDL语句
sql = "update user set gender=${gender}$ where name=${name}$"
ns = {'name': 'Make', 'gender': '0', 'page': 2}
ret = await sor.sqlExe(sql, ns)
## 返回修改记录数
# CRUD,对单表操作的简单方式
# 添加数据
await sor.C('user', {'id':id, 'username':'john'})
## 添加数据表“user”数据
# 删除数据,只从ns中提取id字段,根据id删除记录
await sor.D('user', {'id': 'yuewfiuwe'})
# 修改数据,ns中的id保存不变,其他给定的值为数据修改后的值
# await sor.U('user', {'id', 'email':'test@abc.com'})
# 查询数据,返回满足ns条件的全部记录数组
# await sor.R('user', {'id': 'yuewfiuwe'})
# 查询数据, 返回满足条件的参数“page”页的数据
ns={'gender':'1', 'page': 3, 'pagerows': 100} # pagerows 缺省80
return await subcoro(sor, 'test_data')