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文件读取身份验证密钥检查APIKeyFromSecretsFileMixin
mixin类。切记不要将敏感数据提交到存储库中,因为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
- 项目
标签: