airtable-export 作者 simonw

星标

README 源代码

airtable-export

PyPI Changelog Tests License

将 Airtable 数据导出到磁盘文件

安装

使用 pip 安装此工具

$ pip install airtable-export

用法

您需要以下信息

  • 您的 Airtable Base ID - 这是一个以 app... 开头的字符串
  • 您的 Airtable 个人访问令牌 (Personal Access Token) - 这是一个以 pat... 开头的字符串

如果您只想导出部分表格,您还需要知道这些表格的名称。

您可以通过运行以下命令将所有数据导出到名为 export/ 的文件夹

airtable-export export base_id --key=key

此示例将为您的每个表格创建文件,例如:export/table1.ymlexport/table2.yml

除了使用 --key 选项传递 API 密钥外,您还可以将其设置为名为 AIRTABLE_KEY 的环境变量。

要仅导出指定的表格,请将其名称作为额外参数传递

airtable-export export base_id table1 table2 --key=key

导出选项

默认情况下,此工具将您的数据导出为 YAML 格式。

您也可以使用 --json--ndjson 选项导出为 JSON 或 换行符分隔的 JSON 格式。

airtable-export export base_id --key=key --ndjson

您可以一次传递多个格式选项。此命令将为每个导出的表格创建一个 .json.yml.ndjson 文件。

airtable-export export base_id \
    --key=key --ndjson --yaml --json

如果您导入所有表格,或者添加 --schema 选项,Base 的 JSON schema 将被写入 output-dir/_schema.json 文件。

SQLite 数据库导出

您可以使用 --sqlite database.db 选项将表格导出到 SQLite 数据库文件。

airtable-export export base_id \
    --key=key --sqlite database.db

这可以与其他格式选项结合使用。如果您只指定 --sqlite,则导出目录参数将被忽略。

导出的每个表格都将在 SQLite 数据库中创建一个对应的表格。这些表格将有一个名为 airtable_id 的主键列。

如果您对现有的 SQLite 数据库运行此命令,具有匹配主键的记录将被来自导出的新记录覆盖。

请求选项

默认情况下,此工具使用 python-httpx 的默认配置。

您可以使用 --user-agent 选项覆盖 user-agent

airtable-export export base_id table1 table2 --key=key --user-agent "Airtable Export Robot"

您可以使用 --http-read-timeout 选项覆盖网络读取操作期间的超时。如果未设置,则默认为 5 秒。

airtable-export export base_id table1 table2 --key=key --http-read-timeout 60

使用 GitHub Actions 运行此工具

GitHub Actions 是 GitHub 的工作流程自动化产品。您可以使用它运行 airtable-export,以便将您的 Airtable 数据备份到 GitHub 仓库。这样做可以为您提供对 Airtable 数据所做更改的可见提交历史记录 - 例如此示例

要为您的 Airtable 数据库运行此工具,您首先需要在您的 GitHub 仓库中添加以下秘密

AIRTABLE_BASE_ID
Base ID,一个以 `app...` 开头的字符串
AIRTABLE_KEY
您的 Airtable API 密钥
AIRTABLE_TABLES
一个以空格分隔的 Airtable 表格列表,您想要备份这些表格。如果其中任何名称包含空格,您需要用单引号将其括起来,例如 'My table with spaces in the name' OtherTableWithNoSpaces

设置完这些秘密后,将以下内容添加为一个名为 .github/workflows/backup-airtable.yml 的文件

name: Backup Airtable

on:
  workflow_dispatch:
  schedule:
  - cron: '32 0 * * *'

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - name: Check out repo
      uses: actions/checkout@v2
    - name: Set up Python
      uses: actions/setup-python@v2
      with:
        python-version: 3.8
    - uses: actions/cache@v2
      name: Configure pip caching
      with:
        path: ~/.cache/pip
        key: ${{ runner.os }}-pip-
        restore-keys: |
          ${{ runner.os }}-pip-
    - name: Install airtable-export
      run: |
        pip install airtable-export
    - name: Backup Airtable to backups/
      env:
        AIRTABLE_BASE_ID: ${{ secrets.AIRTABLE_BASE_ID }}
        AIRTABLE_KEY: ${{ secrets.AIRTABLE_KEY }}
        AIRTABLE_TABLES: ${{ secrets.AIRTABLE_TABLES }}
      run: |-
        airtable-export backups $AIRTABLE_BASE_ID $AIRTABLE_TABLES -v
    - name: Commit and push if it changed
      run: |-
        git config user.name "Automated"
        git config user.email "actions@users.noreply.github.com"
        git add -A
        timestamp=$(date -u)
        git commit -m "Latest data: ${timestamp}" || exit 0
        git push

这将每天运行一次(UTC 时间午夜后 32 分钟),如果您手动点击“Run workflow”按钮,它也会运行,参见GitHub Actions:使用 workflow_dispatch 手动触发

开发

要为此工具做贡献,请首先检出代码。然后创建一个新的虚拟环境

cd airtable-export
python -mvenv venv
source venv/bin/activate

或者如果您正在使用 pipenv

pipenv shell

现在安装依赖项和测试

pip install -e '.[test]'

运行测试

pytest