Package: vika
⚠️ 请参考迁移指南从 0.1.x 升级至 1.x 版本，旧版本我们将不再维护!VikaPython SDK 是对维格表 Fusion API 的官方封装，提供类似 Django ORM 风格的 API。用户交流 QQ 群：683795224快速开始环境要求python3.6 +安装pipinstall--upgradevika获取 API TOKEN访问维格表的工作台，点击左下角的个人头像，进入「用户中心 > 开发者配置」。点击生成 Token(首次使用需要绑定邮箱)。使用基础用法fromvikaimportVikavika=Vika("your api_token")dst=vika.datasheet("dstt3KGCKtp11fgK0t")# 传入表格URL 会自动解析表格 id，忽略视图 id。# dst = vika.datasheet("https://vika.cn/space/spcxcvEBLXf7X/workbench/dstt3KGCKtp11fgK0t/viwmKtRiYcPfk")# 创建记录record=dst.records.create({"title":"new record from Python SDK"})print(record.title)# print(record.标题)# 批量创建记录records=dst.records.bulk_create([{"title":"new record from Python SDK"},{"title":"new record from Python SDK2"}])# 更新单个字段值record.title="new title"print(record.title)# "new title"# 更新多个字段值record.update({"title":"new title","other_field":"new value",})# 批量更新多条记录records=dst.records.bulk_update([{"recordId":"recxxxxx1","fields":{"title":"new record.title from Python SDK"}},{"recordId":"recxxxxx2","fields":{"title":"new record.title from Python SDK2"}},])# 附件字段更新my_file=dst.upload_file(<本地或网络文件路径>)record.files=[my_file]# 过滤记录songs=dst_songs.records.filter(artist="faye wong")forsonginsongs:print(song.title)# 批量更新一批记录dst_tasks.records.filter(title=None).update(status="Pending")# 获取单条记录book=dst_book.records.get(ISBN="9787506341271")print(book.title)# 将 record 对象转化为 jsonrecord.json()# 删除符合过滤条件的一批记录dst.records.filter(title=None).delete()# 获取字段forfieldinvika.datasheet("dstId").fields.all():print(field.name)# 获取指定视图的字段，隐藏的字段不会返回forfieldinvika.datasheet("dstId").fields.all(viewId="viewId"):print(field.name)# 获取视图forviewinvika.datasheet("dstId").views.all():print(view.name)字段映射对于中文用户，表格的字段名通常是中文，虽然 Python 支持中文变量名，但是依然会出现中文字段名不符合变量规范的情况。因此你不得不回退到使用 fieldId 作为 key 的情况，致使代码可读性变差。为了改善这种情况，Python SDK 提供了字段映射的功能。Bug 标题!Bug 状态登陆后页面崩溃待修复dst=vika.datasheet("dstt3KGCKtp11fgK0t",field_key_map={"title":"Bug 标题!","state":"Bug状态",})record=dst.records.get()print(record.title)# "登陆后页面崩溃"print(record.state)# "待修复"record.state="已修复"保留使用 field id 作 key 的用法bug=vika.datasheet("dstn2lEFltyGHe2j86",field_key="id")row=bug.records.get(flddpSLHEzDPQ="登陆后页面崩溃")row.flddpSLHEzDPQ="登陆后页面崩溃"row.update({"flddpSLHEzDPQ":"登陆后页面崩溃","fldwvNDf9teD2":"已修复"})指定field_key="id"时，再指定field_key_map对应的键值应该是fieldIdbug=vika.datasheet("dstn2lEFltyGHe2j86",field_key="id",field_key_map={"title":"flddpSLHEzDPQ","state":"fldwvNDf9teD2",})API维格表records 方法dst.records管理表格中的记录。方法参数返回类型说明例子createdictRecord创建单条记录dst.records.create({"title":"new title"})bulk_createdict[]Record[]批量创建多条记录dst.records.bulk_create([{"title":"new record1"},{"title":"new record2"}])bulk_updatedict[]Record[]批量更新多条记录dst.records.bulk_update([{"recordId": "recxxxxx1", "fields":{"title": "new record.title from Python SDK"}}])all**kwargsQuerySet返回记录集合,可传参定制返回内容dst.records.all()get**kwargsRecord单条记录dst.records.get(title="new title")get_or_create(defaults,**kwargs)Record,bool通过 kwargs 查询对应的记录，如果不存在则结合 defaults 创建一条新记录，返回的 bool 表示是否是新建的记录dst.records.get_or_create(title="new title",defaults={"status":"pending"})update_or_create(defaults,**kwargs)Record,bool通过 kwargs 查询对应的记录，并以 defaults 更新记录。不存在则创建（与 get_or_create 一致）dst.records.update_or_create(title="new title",defaults={"status":"done"})filter**kwargsQuerySet过滤一批记录dst.records.filter(title="new title")QuerySet返回 QuerySet 的方法可以进行链式调用。例如 qs = dst.records.all() 返回了一批查询出来的数据集。方法参数返回类型说明例子filter**dictQuerySet过滤出一批记录qs.filter(title="new title")all/QuerySet返回当前记录集合的拷贝qs.filter(title="new title").all()get**dictRecord单条记录qs.get(title="new title")count/int记录总数qs.filter(title="new title").count()last/Record最后一条记录qs.filter(title="new title").last()first/Record第一条记录qs.filter(title="new title").first()update**dictRecord更新成功的记录数qs.filter(title="new title").update(title="new title")delete/bool是否删除成功qs.filter(title="new title").delete()Record查询出来的 QuerySet 是一个 Record 的集合。单个 Record 可以通过record.字段名的方式获取指定字段的值。请尽量避免字段名和 Record 保留的方法属性同名，表格中的同名字段会被遮蔽。如果确实存在，请使用字段映射配置方法/属性参数返回类型说明例子json/dict返回当前记录的所有字段值record.json()_id/str_id 是保留属性，返回当前记录的 recordIdrecord._id字段值维格列字段值与 Python 数据结构的映射关系。 维格表中单元格为空的数据始终是 null，API 返回的记录中，不会包含值为 null 的字段。维格列类型数据类型单行文本str多行文本str单选str多选str[]网址str电话str邮箱str数字number货币number百分比number自增数字number日期number创建时间number修改时间number附件attachment object[]成员unit object[]勾选bool评分int创建人unit object修改人unit object神奇关联str[]神奇引用any[]智能公式str / boolall 参数all 方法会自动处理分页加载全部资源传入分页相关参数（pageNum、pageSize）时，SDK 不会再自动加载全部记录，只返回指定页数据。尽量避免在不加参数的情况下使用 dst.records.all 方法，获取全部数据。
API 每次请求最多获取 1000 条数据，如果你的数据量过大，接近 50000 的限制。在不加任何参数的情况下，调用 all 会串行请求 50 次 API。 不仅非常慢，而且消耗 API 请求额度。返回指定分页的记录dst.records.all(pageNum=3)搭配视图使用指定视图 id 返回和视图中相同的数据。dst.records.all(viewId="viwxxxxxx")使用公式筛选数据dst.records.all(filterByFormula='{title}="hello"')参数类型说明例子viewIdstr视图 ID。请求会返回视图中经过视图中筛选/排序后的结果pageNumint默认 1pageSizeint默认 100 ， 最大 1000sortdict[]指定排序的字段，会覆盖视图排序条件[{ field: 'field1', order: 'asc' }]recordIdsstr[]返回指定 recordId 的记录集['recordId1', 'recordId2']fieldsstr[]只有指定字段会返回filterByFormulastr使用公式作为筛选条件，返回匹配的记录maxRecordsint限制返回记录数，默认 5000cellFormat'json' or 'string'默认为 'json'，指定为 'string' 时所有值都将被自动转换为 string 格式。fieldKey'name' or 'id'指定 field 查询和返回的 key。默认使用列名 'name'。参见：公式使用方式空间站文件目录开发测试复制测试模板到自己的空间站，每次测试时，保证表中只有一条 title = "无人生还" 的记录正式环境测试模板内部环境测试模板cp.env.example.env配置测试所需的环境变量# 安装依赖pipenvinstall--pre
pipenvshell
python-munittesttest更新日志参见:releases相关项目JavaScript SDKGolang SDKJava SDKFAQ可以拿到表格的字段类型（meta）信息吗？目前不可以，后续 REST API 升级会暴露表格 meta 信息可以通过 fields/views 接口获取可以自动创建单多选选项吗？record.tags = ["目前 tags 字段中不存在的选项"]目前不可以，你只能赋值已经存在的选项。后续会支持 :D现在已经支持，如果写入不存在的单多选字段，自动创建该选项单个表格最大支持多少条记录？目前单表最大支持 5w 条记录每次请求可以处理更多的记录吗？目前是 10 条。后续我们会根据实际情况，调整该限制的大小。每次请求可以获取更多的记录吗?目前最大值是 1000 条。后续我们会根据实际情况，调整该限制的大小。