python实现airtable导出数据到数据库中

该博客介绍了如何通过Python脚本`airtable_export_to_pg.py`将Airtable的数据导出到PostgreSQL数据库。文章详细说明了所需的参数,包括Airtable API URL和API token,以及PostgreSQL的数据库名、主机、端口、模式、表名、用户名和密码。还提到了数据导入的三种模式:merge、append和overwrite,并解释了它们的区别。
摘要由CSDN通过智能技术生成
#!/usr/bin/env python
#coding=utf-8
import subprocess
import json
import os
import psycopg2
import re
import sys
import psycopg2.extras

def airtable(air_api_url,air_api_token):
    dev_null = open(os.devnull, 'w')
    list1 = []
    list2 = []
    air_api_url_base = air_api_url
    list_all = []
    while True:
        response = subprocess.check_output('curl "%s" -H "Authorization: Bearer %s"' %(air_api_url,air_api_token), shell=True, stderr=dev_null).decode('utf-8').replace('\n', '')
        res = json.loads(response)['records']
        list_all.extend(res)
        if 'offset' in json.loads(response).keys():
            print('airtable访问的url:' + air_api_url_base + '?offset=' + json.loads(response)['offset'].replace('/','%2F'))
            air_api_url = air_api_url_base + '?offset=' + json.loads(response)['offset'].replace('/', '%2F')
        else:
            break
    print('airtable表中总计行数为:' + str(len(list_all)))
    for i in list_all:
        space = []
        connect = []
        slash = []
        i['fields']['id'] = i['id']
        for key in i['fields']:
            if ' ' in key:
                space.append(key)
            elif '-' in key:
                connect.append(key)
            elif '/' in key:
                slash.append(key)
            else:
                pass
        for j in space:
            i['fields'][j.replace(' ','_')] = i['fields'][j]
            del i['fields'][j]
        for g in connect:
            i['fields'][g.replace('-','_')] = i['fields'][g]
            del i['fields'][g]
        for h in slash:
            i['fields'][h.replace('/','_')] = i['fields'][h]
            del i['fields'][h]
        for key,value in i['fields'].items():
            i['fields'][key]=str(value).replace('\'','\"')
        list1.append(i['fields'])
        #break
    for i in list1:
        list2 = list(set(list2).union(set(list(i.keys()))))
    return list2,list1

def diff_list(list1,list2):
    list1 = {item.lower() for item in list1}
    list2 = {item.lower() for item in list2}
    
    if set(list1).difference(set(list2)) == set():
        return True
    else:
        return 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

太生气

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值