维格表官方 Python SDK

vika的Python项目详细描述


Vika

Vika Python SDK 是对维格表 Fusion API 的官方封装,提供类似 Django ORM 风格的 API。

demo

快速开始

环境要求

python3.6 +

安装

pip install --upgrade vika

获取 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",})# 附件字段更新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)# 删除符合过滤条件的一批记录dst.records.filter(title=None).delete()

字段映射

对于中文用户,表格的字段名通常是中文,虽然 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.update(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 对应的键值应该是 fieldId

bug=vika.datasheet("dstn2lEFltyGHe2j86",field_key="id",field_key_map={"title":"flddpSLHEzDPQ","state":"fldwvNDf9teD2",})

API

records 方法

方法参数返回类型说明例子
createdictRecord创建单条记录^{}
bulk_createdict[]Record[]批量创建多条记录^{}
all**dictQuerySet返回记录集合,可传参定制返回内容^{}
count/int记录总数^{}
get**dictRecord单条记录^{}
filter**dictQuerySet过滤一批记录^{}

QuerySet

返回 QuerySet 的方法可以进行链式调用

方法参数返回类型说明例子
filter**dictQuerySet过滤出一批记录^{}
all/QuerySet返回当前记录集合的拷贝^{}
get**dictRecord单条记录^{}
count/int记录总数^{}
last/Record最后一条记录^{}
first/Record第一条记录^{}
update**dictint更新成功的记录数^{}
delete/bool是否删除成功^{}

all 参数

当首次调用 all 不传入任何参数时,默认加载第一个视图的记录,后续的 filter、get 均在本地缓存数据中进行,all 方法仅在首次调用时,从服务端获取数据。

当调用 all 时,显式地传入参数,则利用服务端计算返回部分数据集。

参数类型说明例子
viewIdstr视图ID。默认为维格表中第一个视图。请求会返回视图中经过视图中筛选/排序后的结果
pageNumint默认 1
pageSizeint默认 100 , 最大 1000
sortdict[]指定排序的字段,会覆盖视图排序条件^{}
recordIdsstr[]返回指定 recordId 的记录集^{}
fieldsstr[]只有指定字段会返回
filterByFormulastr使用公式作为筛选条件,返回匹配的记录
maxRecordsint限制返回记录数,默认 5000
fieldKey'name' or 'id'指定 field 查询和返回的 key。默认使用列名 'name'。

参见:公式使用方式

开发测试

复制测试模板到自己的空间站,每次测试时,保证表中只有一条 title = "无人生还" 的记录

cp .env.example .env

配置测试所需的环境变量

# 安装依赖
pipenv install --pre
python -m unittest test

更新日志

参见: releases

相关项目

FAQ

可以拿到表格的字段类型(meta)信息吗?

目前不可以,后续 REST API 升级会暴露表格 meta 信息

可以自动创建单多选选项吗?

record.tags = ["目前 tags 字段中不存在的选项"]

目前不可以,你只能赋值已经存在的选项。后续会支持 :D

单个表格最大支持多少条记录?

目前单表最大支持 5w 条记录

TODO

  • [ ] 优化数据集较大时的网络请求
  • [ ] 网络请求封装 & 错误处理
  • [ ] filter 操作符

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
安卓为什么Java AudioEffect不支持双簧管?   增加内存后出现java IntelliJ堆大小错误   在unix/linux中工作的java中将unicode字符串转换为ASCII   java是否缺少正确对齐输出的值?   java Spring 3 MVC:动态表单中的onetomany(创建/更新时添加/删除)   java在接口中创建两个通用参数   lambda使用Java 8从嵌套列表中使用forEach查找项的替代方法是什么?   Java正则表达式匹配10位电话号码,中间有空格   linux将log4j外部化。使用命令行Java的属性文件   带有SSL的java简单RMI服务器   java无法为事务[…]打开JPA EntityManager无法获取驱动程序类“null”和URL“null”的连接   Android设备上的java Oauth Foursquare   for循环的ImageButton名称的java骰子模拟浓缩   java有没有简单的1d条形码阅读器?   如何在调用resultset后解决“无效字符串或缓冲区长度”。从java到访问mdb的getString()连接   在Java8中,是否可以使用JVM参数来控制何时(或在什么条件下)卸载类?