weixin_47280864 2022-08-19 14:36 采纳率: 0%
浏览 328

python调取api接口数据插入数据库报错nonetype object is not subscriptable

问题遇到的现象和发生背景

背景:通过api接口获取数据,部分成功,中间报错

问题相关代码,请勿粘贴截图
import requests
import json
import time
import pandas as pd
import psycopg2

t = time.time()
datetime = int(t)

headers = {'content-type': 'application/json'}
data = {'usercode': "xxx", 'pwd_md5': "xxx", 'timestamp': datetime}
url = 'xxx'
response = requests.post(url, headers=headers, data=json.dumps(data))
data = json.loads(response.text)['result']

conn = psycopg2.connect(host='xxx', port=xxx, database='xxx', user='xxx', password='xxx')
cursor = conn.cursor()

sesql = """select equipment_model from dim.dim_mes_device_online where equipment_model is not null
 and equipment_ip is not null group by equipment_model  ;"""
cursor.execute(sesql)
dataSum = []
print(dataSum)
results = cursor.fetchall()
for row in results:
    name = row[0]
    headers1 = {'content-type': 'application/json', 'X-Access-Token': data}
    data1 = {'deviceModel': name, 'offset': 0, 'count': "true", 'timestamp': datetime}
    url1 = 'xxx'
    response1 = requests.post(url=url1, headers=headers1, data=json.dumps(data1))
    count = json.loads(response1.text)['result']['count']
    if count == 0:
        continue
    else:
        num = int(count / 3000)
    print(num)
    i = 0
    while i <= num:
        headers1 = {'content-type': 'application/json', 'X-Access-Token': data}
        data1 = {'deviceModel': name, 'offset': i * 3000, 'count': "true", 'timestamp': datetime}
        url1 = 'xxx'
        response1 = requests.post(url=url1, headers=headers1, data=json.dumps(data1))
        data1 = json.loads(response1.text)['result']['values']
        print(i)
        dataSum = dataSum + data1
        i = i + 1
        print(dataSum)
        df = pd.DataFrame(dataSum)
        list_tup = [tuple(r) for r in df.to_numpy()]
        sub_sql = str(list_tup)[1:-1]
        if sub_sql is not None:
            sql = "insert into public.mes_api_data_tmp values {}".format(sub_sql)
            sql = sql.replace("None", "NULL")
            sql = sql.replace(", nan,", ", NULL,")
            sql = sql.replace("ns=1;i=", "")
            sql = sql.replace("ns=0;i=", "")
        else:
            continue
        print(sql)
        trsql = "TRUNCATE TABLE public.mes_api_data_tmp"
        cursor.execute(trsql)
        cursor.execute(sql)
        conn.commit()

# #关闭数据库链接source_db.close()
conn.cursor()
运行结果及报错内容

运行结果:NoneType object is not subscriptable

我的解答思路和尝试过的方法

知道是count = json.loads(response1.text)['result']['count']出错了,但是不知道如何修改?

  • 写回答

2条回答 默认 最新

  • honestman_ 2022-08-19 14:39
    关注

    把你的报错截图一下看下,看看具体报错在哪一行
    错误意思是None对象不能被调用

    评论

报告相同问题?

问题事件

  • 创建了问题 8月19日

悬赏问题

  • ¥15 结构功能耦合指标计算
  • ¥20 visual studio中c语言用ODBC链接SQL SERVER
  • ¥50 AI大模型精调(百度千帆、飞浆)
  • ¥15 非科班怎么跑代码?如何导数据和调参
  • ¥15 福州市的全人群死因监测点死亡原因报表
  • ¥15 Altair EDEM中生成一个颗粒,并且各个方向没有初始速度
  • ¥15 系统2008r2 装机配置推荐一下
  • ¥15 悬赏Python-playwright部署在centos7上
  • ¥15 psoc creator软件有没有人能远程安装啊
  • ¥15 快速扫描算法求解Eikonal方程咨询