form.selectdata
功能说明
描述
查询指定表单存放在数据库中的数据。(支持图片/附件/手写签名的文件操作)
支持部分mysql函数,请查看文档【支持的SQL函数】
函数原型
form.selectdata(formAlias,fields,wheres=None,type=0)参数
| 名称 | 类型 | 描述 | 
|---|---|---|
| formAlias | 字符型 | 表单别名,可以在表单设计界面中的”表单属性”中获取(支持跨应用取数据,格式为:"appid@表别名") | 
| fields | 数组:列表型 | 查询字段,为表单的字段的别名,可以在表单设计的字段属性中获取,支持表单字段和子表单字段同时查询(子表单字段只能属于同一个子表单), ["*"]表示查询所有字段。具体参考示例 | 
| wheres | 数组:字典型 | 查询条件,条件为数组格式,默认为空 | 
| type | 整数型 | 默认为0 0:以列名的方式返回查询结果的全部数据 1:以索引的方式返回查询结果的全部数据 2:以列名的方式返回查询到的第一条记录 3:以索引的方式返回查询到的第一条记录 4:以集合的方式返回查询结果的全部数据(集合特性默认去重) | 
- wheres 数据格式:
- WHERE (单行文本 like "%111%") AND (多行文本 between "111" AND "222") GROUP BY 单行文本,多行文本 ORDER BY 单行文本 DESC,多行文本 ASC LIMIT 0,20{ "AND":[ { "name":"单行文本", "val":"%111%", "exp":"like" }, { "name":"多行文本", "val":{ "111", "222" }, "exp":"between" } ], "ORDER":[ { "name":"单行文本", "mode":"desc" }, { "name":"多行文本", "mode":"asc" } ], "GROUP":[ "单行文本", "多行文本" ], "LIMIT":[ 0, 20 ] }
| 名称 | 描述 | 
|---|---|
| AND | 指定where元素的连接方式(OR的格式和AND相同) | 
| ORDER | 指定结果集的排序方式 | 
| GROUP | 指定结果集的过滤字段 | 
| LIMIT | 指定结果集的过滤行数 | 
| name | 字段别名 | 
| val | 字段对应的值,可以为单个或多个值 | 
| exp | 连接字段 name 和 val 的表达式 | 
| mode | 指定排序规则,"asc" 表示顺序排列,"desc" 表示倒序排列 AND,OR嵌套的 where 格式: WHERE (会议室名称 = "会议室1") AND (((会议起始时间 >= "2019-08-13 10:40:00") AND (会议结束时间 <= "2019-08-14 10:40:10")) OR ((会议议题1 = "议题1内容") OR (会议议题2 = "议题2内容"))) | 
{
    "AND":[
        {
            "val":"会议室1",
            "exp":"=",
            "name":"会议室名称"
        },
        "OR":{
            "AND":[
                {
                    "val":"2019-08-13 10:40:00",
                    "exp":">=",
                    "name":"会议起始时间"
                },
                {
                    "val":"2019-08-14 10:40:10",
                    "exp":"<=",
                    "name":"会议结束时间"
                }
            ],
            "OR":[
                {
                    "val":"议题1内容",
                    "exp":"=",
                    "name":"会议议题1"
                },
                {
                    "val":"议题2内容",
                    "exp":"=",
                    "name":"会议议题2"
                }
            ]
        }
    ]
}返回值
| 类型 | 描述 | 
|---|---|
| 数组:列表型、字典型、集合型 | 根据参数中的type类型返回不同的格式的数组 | 
| 参数 | 类型 | 描述 | 
|---|---|---|
| 0 | 列表型 | 以列名的方式返回查询结果的全部数据 | 
| 1 | 列表型 | 以索引的方式返回查询结果的全部数据 | 
| 2 | 字典型 | 以列名的方式返回查询到的第一条记录 | 
| 3 | 列表型 | 以索引的方式返回查询到的第一条记录 | 
| 4 | 集合型 | 以集合的方式返回查询结果的全部数据(集合特性默认去重) | 
- 数据格式:[ { "deleteTime":"", "createTime":"2019-01-05 15:05:07", "updateTime":"2019-01-11 11:00:38", "单行文本":"abc", "多行文本":"def", "图片":[ { "size":"85559", "uploadTime":"2019-03-26T17:48:28Z", "_id":"58f57658a48dae2e5f68952e", "name":"1.jpg", "mime":"image/jpeg", "uploader":"547a48c50eccde5ac8c0883b", "bucket":"pub-file", "qnKey":"Fko6hnrcvUS7n4b6QKszWRDKMsVC" } ], "附件":[ { "size":"79273", "uploadTime":"2019-03-26T17:59:15Z", "_id":"53b506717f9b4cd9d5e89e85", "name":"1.txt", "mime":"text/plain", "uploader":"547a48c50eccde5ac8c0883b", "bucket":"pub-file", "qnKey":"FpTHlLKcZrGQuRFedYoSwnKWs6V4" } ], "手写签名":[ { "_id":"5adf0f8e7f96c03842ae3f72", "bucket":"pub-file", "uploader":"", "uploadTime":"2019-05-20T17:25:43Z", "size":"98328", "qnKey":"FhdH1pyNASeDYC3JwiJQB77vmJr2", "name":"bbysignature_1558512038935.png", "mime":"image/png" } ], "creator":{ "nickname":"bobo", "id":"547a48c50eccde5ac8c0883b" }, "deleter":"", "id":"5e5057a78d478a699e99a7d8" }, { "deleteTime":"", "createTime":"2019-01-11 11:00:49", "updateTime":"2019-01-11 11:00:49", "单行文本":"abc2", "多行文本":"def2", "图片":[], "附件":[], "creator":{ "nickname":"bobo", "id":"547a48c50eccde5ac8c0883b" }, "deleter":"", "id":"58d0e3930170170b8953877e" } ]
| 名称 | 描述 | 
|---|---|
| id | 数据id,在不同的范围内代表不同含义(例如在 creator 中表示数据创建者的userid) | 
| creator | 数据的创建者 | 
| createTime | 数据的创建时间 | 
| deleter | 数据的删除者 | 
| deleteTime | 数据的删除时间 | 
| nickname | 数据的创建者对应的昵称 | 
| size | 文件大小,单位:字节 | 
| name | 文件名称 | 
| mime | 文件类型 | 
| uploader | 上传人id(手写签名里为空) | 
| uploadTime | 上传时间 | 
| bucket | 文件服务器的空间名称 | 
| qnKey | 文件在服务器空间上的标识符 | 
子表单字段和外层字段同时查询时的结果集:
- 注意当子表单数据条数 > 外层数据条数时将自动填充数据补齐空白部分,如下图所示: 原始数据为:
| 单行文本 | 单行文本_子表单 | 
|---|---|
| 11 | 33 | 
| 44 | 
查询结果为:
| 单行文本 | 单行文本_子表单 | 
|---|---|
| 11 | 33 | 
| 11 | 44 | 
备注
可能出现的错误信息,执行 getlasterror 函数获取具体详细信息:
- 错误编码=getlasterror()
- 错误信息=getlasterror(1)
| 错误编码 | 错误信息 | 
|---|---|
| 1407 | api执行频率超出限制 | 
| 1400 | 参数类型不正确 | 
| 1300 | 参数不是数组类型 | 
| 1305 | 参数不是关联数组 | 
| 1313 | 参数非法 | 
| 1506 | 连接数据库失败 | 
| 1502 | 取表单字段失败 | 
| 1594 | 不允许操作回收站的表单 | 
| 1560 | 表单中没有可操作的数据,请检查参数是否正确 | 
| 1302 | 赋值失败 | 
| 1513 | 条件字段不为关联数组 | 
| 1508 | 非法字段别名 | 
| 1504 | 不存在的字段 | 
| 1582 | 非法的表达式 | 
| 1505 | 不支持的函数 | 
| 1587 | 查询超出范围 | 
| 1504 | 不存在的字段 | 
| 支持的sql函数(只支持大写) | COUNT、MAX、MIN、AVG、SUM、NOW | 
| 支持的sql比较关键字(只支持大写) | AND、OR、ORDER、GROUP(group by)、LIMIT | 
其他:
- 所有表单查询api的结果集行数最多返回500条数据。
- 所有表单api调用频率限制为1000次/分钟。
示例
def test():
    # name(字段别名), val(字段对应的值), exp(条件表达式) 为条件专有名称
    # where组合表达式格式为: AND = [{"name" :"单行文本","val" :"单行文本1","exp" :"="},{"name" :"单行文本2","val" :"单行文本2","exp" :"="}]
    #当条件只有1个时写法为:AND=[{"name":"单行文本","val":"单行文本1","exp":"="}]
    # 普通字段查询
    # 查询全部数据使用 ["*"]
    fields=["单行文本"] 
    res=form.selectdata("测试表单",fields)
    # 普通字段和子表单字段同时查询
    where={"AND":[{"name":"单行文本","val":["11"],"exp":"in"},{"name":"单行文本_子表单","val":["33","44"],"exp":"in"}]}
    res=form.selectdata("测试表单",["单行文本","单行文本_子表单"],where)
    print(res)
    # select '单行文本' from '测试表单' LIMIT 0,500
    fields=["单行文本"]
    _limit=[0,500]
    where={"LIMIT"=_limit}
    res=form.selectdata("测试表单",fields,where)
    print(res)
    # select MAX('单行文本') from '测试表单'
    # 开头表示sql函数, 支持的函数名称详情见备注
    fields=["#MAX(单行文本)"]
    res=form.selectdata("测试表单",fields)
    print(res)
    # select '单行文本' from '测试表单' where 单行文本 IN (1,2,3) AND 单行文本1 NOT IN  (4,5,6) ORDER BY 单行文本 DESC
    fields=["单行文本"]
    _and=[{"name":"单行文本","val":[1,2,3],"exp":"="},{"name":"单行文本1","val":[4,5,6],"exp":"NOT IN"}]
    _order=[{"name":"单行文本","mode":"desc"}]
    where={"ORDER":_order,"AND":_and}
    res=form.selectdata("测试表单",fields,where)
    print(res)
    # select '单行文本' from '测试表单' where 单行文本1 IS NULL AND 单行文本2 IS NOT NULL
    fields=["单行文本"]
    _and=[{"name":"单行文本1","val":"None","exp":"="},{"name":"单行文本2","val":"None","exp":"NOT IN"}]
    where={"AND":_and}
    res=form.selectdata("测试表单",fields,where)
    print(res)
    # select '单行文本' from '测试表单' where 单行文本 > '单行文本1' AND 单行文本 < '单行文本2';
    fields=["单行文本"]
    _and=[{"name":"单行文本","val":"单行文本1","exp":">"},{"name":"单行文本","val":"单行文本2","exp":"<"}]
    where={"AND":_and}
    res=form.selectdata("测试表单",fields,where)
    print(res)
    # select '单行文本' from '测试表单' where 单行文本1 BETWEEN '单行文本2' and '单行文本3';
    fields=["单行文本"]
    _and=[{"name":"单行文本1","val":["单行文本2","单行文本3"],"exp":"BETWEEN"}]
    where={"AND":_and}
    res=form.selectdata("测试表单",fields,where)
    print(res)
    # select '单行文本' from '测试表单' where (单行文本 LIKE '%文本1%') and (单行文本 LIKE '%文本2%')
    fields=["单行文本"]
    _and=[{"name":"单行文本","val":"%文本1%","exp":"LIKE"},{"name":"单行文本","val":"%文本2%","exp":"LIKE"}]
    where={"AND":_and}
    res=form.selectdata("测试表单",fields,where)
    print(res)
    #select '单行文本' from '测试表单' where (单行文本='单行文本1') or (单行文本='单行文本2')
    fields=["单行文本"]
    _or=[{"name":"单行文本","val":"单行文本1","exp":"="},{"name":"单行文本","val":"单行文本2","exp":"="}]
    where={"OR":_or}
    res=form.selectdata("测试表单",fields,where)
    print(res)
    #select '单行文本' from '测试表单' where ( 单行文本='单行文本1' AND ( 单行文本='单行文本1' OR 单行文本 !='单行文本2' ))
    fields=["单行文本"]
    _or=[{"name":"单行文本","val":"单行文本1","exp":"="},{"name":"单行文本","val":"单行文本2","exp":"!="}]
    _and=[{"name":"单行文本","val":"单行文本1","exp":"="},"OR":_or}
    where={"AND":_and}
    res=form.selectdata("测试表单",fields,where)
    print(res)
    #select '单行文本' from '测试表单'  where ( 单行文本='单行文本1' AND ( 单行文本='单行文本1' OR 单行文本 !='单行文本2' )) GROUP BY 单行文本,多行文本 ORDER BY 单行文本 desc,多行文本 DESC LIMIT 0,20
    fields=["单行文本","多行文本"]
    _or=[{"name":"单行文本","val":"单行文本1","exp":"="},{"name":"单行文本","val":"单行文本2","exp":"="}]
    _and=[{"name":"单行文本","val":"单行文本1","exp":"="},"OR":_or}
    _order=[{"name":"单行文本","mode":"desc"},{"name":"多行文本","mode":"asc"}]
    _group=["单行文本","多行文本"]
    _limit=[0,20]
    where={"AND":_and,"GROUP":_group,"ORDER":_order,"LIMIT":_limit}
    res=form.selectdata("测试表单",fields,where)
    print(res)演示示例
- 暂无
安装包下载
- 暂无
相关视频
- 暂无
