Java之~List批量,分页拉取第三方数据存入自己的库

//先获取对方数据总数
int size = list.size;
//一次存量
int count = 5000;
//执行数
int counts = size / count;
//取余,如果大于1,就再加一
int yu = size % count;
if (yu > 0) {
    counts += 1;
}
   String sql ="";
        List<ssData> List = new ArrayList<>();
        for(int i=1;i<= counts; i++){
            //截取,分批保存(重点)
            sql ="SELECT * FROM Table_name where time BETWEEN '"+startStr+"' and '" +endStr+"' limit 5000 offset "+ count*(i-1);
            ResultVO resultVO = Service.fetchData(sql, token);

            if (resultVO.getCode() != ResultCode.SUCCESS) {
                //失败的话 重试校验
                for(int times = 0;times <5;times++){

                    ResultVO res = Service.fetchData(sql, token);
                    if(res.getCode() != ResultCode.SUCCESS){
                        if (times >= 5) {
                            logger.error("拉取业务数据失败第["+times+"]次");
                         
好的!以下是关于如何使用Python通过API获取数据、对数据进行清洗,并将结果存储到MySQL数据的一个完整示例。 --- ### 示例代码 ```python import requests import mysql.connector from datetime import datetime # 第一步:从API获取数据 def fetch_data_from_api(url): try: response = requests.get(url) if response.status_code == 200: return response.json() else: print(f"请求失败,状态码:{response.status_code}") return None except Exception as e: print(f"发生错误:{e}") return None # 第二步:数据清洗函数 def clean_data(data_list): cleaned_data = [] for item in data_list: # 假设 API 返回的数据是一个列表字典,每个字典包含 'name', 'age', 和 'created_at' name = item.get('name', '').strip() or "未知" age = int(item.get('age', -1)) created_at_str = item.get('created_at') # 数据验证和转换 if not isinstance(name, str) or len(name) > 50: continue if age <= 0 or age >= 120: continue try: created_at = datetime.strptime(created_at_str, '%Y-%m-%dT%H:%M:%S.%fZ') if created_at_str else datetime.now() except ValueError: created_at = datetime.now() cleaned_item = { 'name': name, 'age': age, 'created_at': created_at } cleaned_data.append(cleaned_item) return cleaned_data # 第三步:连接并插入 MySQL 数据 def insert_into_mysql(data): try: conn = mysql.connector.connect( host='localhost', user='root', password='password', database='test_db' ) cursor = conn.cursor() sql_query = """ INSERT INTO users (name, age, created_at) VALUES (%s, %s, %s); """ for record in data: values = ( record['name'], record['age'], record['created_at'] ) cursor.execute(sql_query, values) conn.commit() print("数据已成功保存到数据") except mysql.connector.Error as err: print(f"MySQL 错误: {err}") finally: if conn.is_connected(): cursor.close() conn.close() if __name__ == "__main__": api_url = "https://jsonplaceholder.typicode.com/users" # 替换为你需要访问的实际 API 地址 raw_data = fetch_data_from_api(api_url) if raw_data and isinstance(raw_data, list): # 确保返回的是有效的 JSON 列表 cleaned_data = clean_data(raw_data) insert_into_mysql(cleaned_data) ``` --- ### 主要步骤说明: 1. **从API获取数据** 使用 `requests` 发起 HTTP 请求并解析 JSON 格式的响应内容。如果返回的状态码不是 200 或者发生了异常,则会提示用户相应信息。 2. **数据清洗** 对接收到的原始数据进行必要的清理操作,例如去除多余的空格、处理缺失值以及校验字段有效性等。对于不符合预期规则的数据行会被过滤掉。 3. **存储到MySQL** 连接到本地运行的 MySQL 实例,创建一个新的记录或更新现有表格中的条目。确保在 SQL 插入之前所有字段都已经过适当的类型检查与日期格式化。 --- ### 注意事项: - 需安装第三方模块如 `mysql-connector-python` (`pip install mysql-connector-python`)。 - 修改 MySQL 的用户名(`user`)、密码(`password`)及目标 DB 名称以便适配您的环境配置。 - 如果实际使用的 API 接口有分页机制,请考虑循环全部页面的内容再做统一处理。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值