# sqlor sqlor为web应用提供数据库接口支持, 目前支持的数据库有: * sqlite3 * mysql(mariadb) * postgresql * gauss * oracle * sql server 本模块支持异步DBAPI接口,目前测试过的有aiomysql, aiopg ## sqlor 优点 * 支持多种数据库 * 支持异步,减少了thread的开销 * 自动游标管理 * 自动事务管理 ## 典型的应用模式 ## sor 方法 ### C(tablename, ns) 向添加表中添加一条记录 #### 例子 ``` db = DBPools() async with db.sqlorContext(dbname) as sor: await sor.C(tablename, ns) ``` #### 参数说明 ##### tablename 数据库表名称 ##### ns 字典类型的数据,字典的key为自发段名,字典的value是字段值,至少表主键和必须项要求数据 #### 返回值 无 ### R(tablename, ns, filters=None) 按要求检索数据,支持分页数据检索和全部数据检索 #### 例子 ``` db = DBPools() ns = params_kw.copy() async with db.sqlorContext(dbname) as sor: r = await sor.R(tablename, ns) ``` #### 参数说明 ##### tablename 数据表名 ##### ns 字典数据,参数 ##### filters 缺省为None, 无过滤对象 否则是一个字典类型的过滤定义对象 #### 返回值 * 当ns中没有page属性时,说明返回全部数据,返回数组类型的数据列表 * 当ns中有page属性时,返回 ``` { "total":记录数, "rows":[一页的数据记录] } ``` 字典数据 ### U(tablename, ns) 修改数据记录,ns中的keys必须包含数据表的primary字段,按照primary字段数据检索并修改数据记录 #### 例子 ``` db = DBPools() ns = params_kw.copy() async with db.sqlorContext(dbname) as sor: await sor.U(tablename, ns) ``` #### 参数说明 ##### tablename 数据表名 ##### ns 字典类型的数据,字典的key为自发段名,字典的value是字段值,至少表主键和必须项要求数据 #### 返回值 无 ### D(tablename, ns) 删除数据记录,ns中的keys必须包含数据表的primary字段,按照primary字段数据删除数据表记录 #### 例子 ``` db = DBPools() ns = params_kw.copy() async with db.sqlorContext(dbname) as sor: await sor.D(tablename, ns) ``` #### 参数说明 ##### tablename 数据表名 ##### ns 字典类型的数据,字典的key为自发段名,字典的value是字段值,至少表主键数据 #### 返回值 无 ### tables() ### I(tablename) 获得表的建表信息 #### 例子 ``` db = DBPools() async with db.sqlorContext(dbname) as sor: r = await sor.I(tablename) ``` #### 参数说明 ##### tablename 数据表名 ### 返回值 如果数据表不存在,返回None,否则返回字典类型, 返回值例子 ``` { "summary": [ { "name": "user", "title": "\u7528\u6237\u89d2\u8272", "primary": [ "id", "id" ] } ], "fields": [ { "name": "id", "type": "str", "length": 32, "dec": null, "nullable": "no", "title": "\u7528\u6237id", "table_name": "user" }, { "name": "userid", "type": "str", "length": 32, "dec": null, "nullable": "yes", "title": "\u7528\u6237id", "table_name": "user" }, { "name": "rolerd", "type": "str", "length": 32, "dec": null, "nullable": "yes", "title": "\u89d2\u8272id", "table_name": "user" } ], "indexes": [] } ``` ### sqlExe(sql,ns) 执行SQL语句 #### 例子 ``` db = DBPools() sql = "select * from mytable id=${id} country=${country}" ns = params_kw.copy() async with db.sqlorContext(dbname) as sor: r = await sor.sqlExe(sql, ns) ``` sql中支持使用参数,sqlor使用$[x}$引用变量,sql中的变量需要在ns中能够找到 #### 参数说明 ##### sql 字符串, 一个合法的sql语句字符串,支持变量,变量用${x}$格式引用ns中的属性. ##### ns sql语句所需参数字典,如果在ns中找不到sql中引用的变量,将出错 #### 返回值 如果是“select” 语句,返回数组变量,包含所有找到的数据记录 其他类型的sql执行结果没有定义 如果出错,返回None ### sqlPaging(sql, ns) 执行sql,并分页返回数据 #### 例子 ``` db = DBPools() sql = "select * from mytable id=${id} country=${country}" ns = params_kw.copy() async with db.sqlorContext(dbname) as sor: r = await sor.sqlPaging(sql, ns) ``` #### 参数说明 ##### sql 字符串, 一个合法的sql语句字符串,支持变量,变量用${x}$格式引用ns中的属性. ##### ns ns中必须包含一个sort属性,说明sql结果数据的排序字段,如果不指定,函数将出错,page参数如果不存在,自动设置为1 ##### 返回值 如果sql是一个select语句,返回如下结构数据 ``` { "total":总记录数 "rows":[一页的数据] } ```