You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python从imeicheck.com API获取IMEI数据并导入Oracle的问题求助

问题解决方案

一、获取全量IMEI数据

该网站公开API仅支持单IMEI查询,无法直接获取全量数据,可按以下思路处理:

  • 先确认网站是否提供批量查询API:查看网站的API文档(若有),是否允许一次传入多个IMEI参数,或有专门的批量接口;
  • 若无批量接口,需自行收集目标IMEI列表(注意合法性,避免使用未经授权的数据源),然后循环调用单IMEI查询接口:
    • 调用时加入延迟(如time.sleep(1)),避免因请求频率过高被网站封禁;
    • 使用requests.Session()保持会话,提升请求效率;
  • 注意:IMEI属于设备敏感信息,爬取或使用需遵守相关法律法规及网站的使用条款。

二、Oracle插入错误(ORA-01036)

这个错误是因为绑定变量的数量/顺序与传入数据不匹配,结合你的代码,问题出在DataFrame构造和数据行生成环节,修正步骤如下:

  1. 修正DataFrame构造:
    单IMEI API返回的是单个字典对象,直接用pd.DataFrame(data)会导致列结构异常,需改为pd.DataFrame([data])将其转为一行数据:

    data = response_API.json()
    df = pd.DataFrame([data])  # 用列表包裹单个字典,生成正确的行结构
    
  2. 确保数据列与插入字段匹配:
    检查DataFrame的列名是否与DIM_IMEI表的字段(IMEI, brand, models, model_name)对应,若列名不一致,需调整顺序或重命名:

    # 强制指定列顺序,确保与INSERT语句一致
    df = df[['imei', 'brand', 'models', 'model_name']]
    # 若列名大小写不匹配,可重命名
    df.columns = ['IMEI', 'brand', 'models', 'model_name']
    
  3. 优化executemany调用:
    可以使用命名绑定变量,避免顺序错误,代码更清晰:

    curs.executemany('''INSERT INTO DIM_IMEI(IMEI, brand, models, model_name) 
                        VALUES (:IMEI, :brand, :models, :model_name)''',
                     df.to_dict('records'))  # 直接传入字典列表,无需手动转rows
    

修正后的完整代码示例

import requests
import pandas as pd
import cx_Oracle
import time

# 示例:假设你有一个IMEI列表
imei_list = ["352322311421731", "另一个IMEI"]
all_data = []

# 循环调用API获取数据
session = requests.Session()
for imei in imei_list:
    url = f"https://alpha.imeicheck.com/api/modelBrandName?imei={imei}&format=json"
    response = session.get(url, verify=False)
    if response.status_code == 200:
        all_data.append(response.json())
    time.sleep(1)  # 加入延迟,避免被封禁

# 构造DataFrame
df = pd.DataFrame(all_data)
# 确保列顺序与表字段一致
df = df[['imei', 'brand', 'models', 'model_name']]
df.columns = ['IMEI', 'brand', 'models', 'model_name']

# 插入Oracle数据库
conn_str = 'bi/testpasss@1.1.1.1:1521/ORABI'
with cx_Oracle.connect(conn_str) as db:
    with db.cursor() as curs:
        curs.execute('TRUNCATE TABLE DIM_IMEI')
        # 使用命名绑定变量
        curs.executemany('''INSERT INTO DIM_IMEI(IMEI, brand, models, model_name) 
                            VALUES (:IMEI, :brand, :models, :model_name)''',
                         df.to_dict('records'))
    db.commit()

内容的提问来源于stack exchange,提问作者Arash

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 11:48:11