djangoistive库与Airtable接口

pyrtable的Python项目详细描述


Pyrtable:与Airtable接口的Python框架

Pyrtable是一个与Airtable的restapi接口的python3库。在

还有其他Python项目需要处理Airtable。然而,它们中的大多数基本上都提供了一个很薄的层来简化身份验证和过滤——最后,程序员仍然必须手动处理JSON编码/解码、分页、请求速率限制等等。在

Pyrtable是一个高级的类似ORM的库,它隐藏了所有这些细节。它在Airtable记录和Python对象之间执行自动映射,允许CRUD操作,同时力求直观和有趣。习惯于Django的程序员将发现许多相似之处,并且(希望)能够在几分钟内与空中基地进行接口。在

它看起来像什么?在

好的,让我们来看看如何定义一个映射到表记录上的类:

importenumfrompyrtable.recordimportBaseRecordfrompyrtable.fieldsimportStringField,DateField,SingleSelectionField, \
        SingleRecordLinkField,MultipleRecordLinkFieldclassRole(enum.Enum):DEVELOPER='Developer'MANAGER='Manager'CEO='C.E.O.'classEmployeeRecord(BaseRecord):classMeta:# Open “Help > API documentation” in Airtable and search for a line# starting with “The ID of this base is XXX”.base_id='appABCDE12345'table_id='Employees'@classmethoddefget_api_key(cls):# The API key can be generated in you Airtable Account page. # DO NOT COMMIT THIS STRING!return'keyABCDE12345'name=StringField('Name')birth_date=DateField('Birth date')office=SingleRecordLinkField('Office',linked_class='OfficeRecord')projects=MultipleRecordLinkField('Allocated in projects',linked_class='ProjectRecord')role=SingleSelectionField('Role',choices=Role)

之后,常见的操作非常简单:

^{pr2}$

请注意,一旦定义了记录类,我们就不再处理Airtable列或表名。在

超出基本要求

请记住,Airtable是not一个数据库系统,并不是真正为需要改变大量数据的任务而设计的。事实上,只有fetch(list)操作是批处理的,insert/update/delete操作仅限于每个请求一条记录,Airtable甚至对付费帐户也规定了每秒5个请求的限制。你需要整整一分钟来更新300条记录!在

也就是说,Pyrtable会遵守这个限制。实际上,它将跟踪脏字段以避免不必要的服务器请求,并将.save()调用呈现为未更改对象的无操作。它也适用于多个线程,因此可以使用以下模式更新和/或创建多个记录:

fromconcurrent.futures.threadimportThreadPoolExecutorall_records=list(EmployeeRecord.objects.all())# Do operations that change some records here# No need to keep track of which records were changedwithThreadPoolExecutor(max_workers=10)asexecutor:forrecordinall_records:executor.submit(record.save)

或者,如果你想要一个非常漂亮的tqdm进度条:

fromtqdmimporttqdmwithThreadPoolExecutor(max_workers=10)asexecutor:for_intqdm(executor.map(lambdarecord:record.save(),all_records),total=len(all_records),dynamic_ncols=True,unit='',desc='Updating Airtable records'):pass

Pyrtable还有一些额外的工具来缓存数据和从外部JSON/YAML文件读取身份验证密钥检查APIKeyFromSecretsFileMixinmixin类。切记不要将敏感数据提交到存储库中,因为Airtable身份验证允许使用单个API密钥full R/W访问您的所有基础!在

兼容性

Pyrtable与python3.7和3.8兼容。以前的3.x版本可能工作,也可能不工作。根本不支持Python2.x。在

文件

技术文档可从https://pyrtable.readthedocs.io获取。在

问题、错误报告、改进

想试试看,贡献,建议,帮忙吗?太好了!该项目可在https://github.com/vilarneto/pyrtable获得。在

许可证

Pyrtable在MIT license下释放。

版权所有(c)2020 Vilar Fiuza da Camara Neto

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

推荐PyPI第三方库


热门话题
java如何将cassandra中的行数据转换为与列相关的嵌套json   java如何使用jcr XPath在jcr:content/@jcr:data中搜索?   java在使用openCV进行安卓开发时如何利用手机的广角镜头   java解析扩展了接口,结束了一个潜在的无限循环   位置服务的@Override方法中存在java Android应用程序错误   java本地线程的用途和需求是什么   具有左右子访问的java节点树遍历   java验证JsonWebToken签名   JUL日志处理程序中的java日志记录   嵌入式Java读取给定时间段的串行数据。   java有没有办法从多个URL获取多个图像?   java线程通过等待intent阻止自己发送intent   java Spring MVC解析多部分内容请求   java JPA/Hibernate静态元模型属性未填充NullPointerException   java格式错误的字符(需要引号,得到I)~正在处理   java为什么PrintWriter对象抛出FileNotFoundException?   java Neo4j未正确保存标签   java IE不加载图像